一、REST 简介

RESTRepresentational State Transfer)是一种软件架构风格或者开发模式,主要面向可以在多种系统之间提供标准的数据通信功能的 Web 服务。
而 REST 风格的 Web 服务则允许请求端通过统一的、预先定义好的无状态行为来访问和操作服务端数据。

详细不懂的,网上一堆文档说明。

推荐: 阮一峰大神写的 RESTful API 设计指南


二、环境搭建

当前的系统开发环境

  • Python 3.10.7 (当前最新)
  • pyenv 结合pyenv-virtualenv管理多版本环境
  • Flask==2.2.2
  • Flask-SQLAlchemy==3.0.2
  • PyMySQL==1.0.2
  • passlib==1.7.4
  • Flask-JWT-Extended==4.4.4
  • marshmallow-sqlalchemy==0.28.1

当然如果Python环境不会安装和配置,推荐使用 Anaconda , 一键安装配置。 不过最好还是自己安装配置一下,因为这样自己会有很多成长经验。比如说cli命令熟悉度、包安装不上(源更换等)等。

pyenv 和 pyenv-virtualenv 这两个版本管理包不会安装,可直接网上搜索教程。很简单的哦~

Github: pyenv

Github: pyenv-virtualenv


环境安装命令

# 创建 3.10.7 的开发环境,环境独立不与电脑中其它项目冲突,方便后继不用时删除
pyenv virtualenv 3.10.7 dev3.10

# 进入项目目录
cd ~/flask-rest-api

# 激活环境
pyenv shell dev3.10

虚拟环境安装 flask

pip install flask

Flask 中文2.1.2文档

Flask 官方2.2.x文档

安装后来一个最简单的 Hello world 作为一个开始。

# hello.py
# 示例为官方最小应用
# https://flask.palletsprojects.com/en/2.2.x/quickstart/#a-minimal-application

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

要运行以上最小应用使用以下命令:

FLASK_APP=hello.py flask run

SQLAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。
SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中成为广泛使用的ORM工具之一,不亚于Django的ORM框架。

Flask-SQLAlchemy 官方文档

安装命令:

pip install flask-sqlalchemy

数据库配置,为了简单使用 sqlite, 当然也可以使用 MySQL驱动包 PyMySQL进行MySQL的使用。这个是没有限制的。

数据库配置代码如下:

# run.py
# 引入核心包
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 配置数据库文件 
# sqlite 配置参数
# app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./<dbname>.db'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./blog.db'

# mysql 配置参数
# 如果使用的 mysql 可以安装 PyMySQL,并使用以下配置
# pip install pymysql
# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<mysql_username>:<mysql_password>@<mysql_host>:<mysql_port>/<mysql_db>'

# 初始化 db
db = SQLAlchemy(app)


# 创建文章表
class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(30))
    # 内容为演示就要限制 300长度
    content = db.Column(db.String(300))
    
    # 添加文章
    def add(self):
        db.session.add(self)
        db.session.commit()
        return self
    
    # 实例化时传参数
    def __init__(self, title, content):
        self.title = title
        self.content = content
    
    # 打印时间显示 <Article 1>
    def __repr__(self):
        return '<Article %d>' % self.id


# 创建表
with app.app_context():
    db.create_all()

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

以上代码说明:

app.config[‘SQLALCHEMY_DATABASE_URI’] 会让脚本在当前文件下生成一个 sqlite 文件: blog.db。后继通过 SQLAlchemy 定义的 Class Article 为定义博客的文章表。

with app.app_context():
    db.create_all()

上面代码会根据定义的model类去创建对应的表。如果定义了多个类,则会创建多个表。运行后可在对应的MySQL管理客户端查看。

分类: Python

0 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注