Flask 接口
写在前面
Flask-RESTful官方文档
https://flask-restful.readthedocs.io/en/latest/
安装Flask-RESTful
pip install flask-restful
1、Flask-RESTful开始
1.1、新建一个flask项目
首先得安装一下这几个包
# rest
pip install flask-restful
# 插件
pip install flask-script
# mysql
pip install pymysql
# mysql驱动
pip install flask-sqlalchemy
# 迁移
pip install flask-migrate
# 缓存
pip install flask_caching
# reids
pip install redis
目录结构
这里我把app.py改成了manage.py
App/_ init _.py里面的代码
from App.ext import init_ext
from App.settings import envs
from App.views import init_blue
from flask import Flask
def create_app(env):
app = Flask(__name__)
app.config.from_object(envs.get(env))
init_ext(app)
init_blue(app)
return app
App/ext.py里面的代码
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from flask_caching import Cache
db = SQLAlchemy()
migrate = Migrate()
cache = Cache(
config={
"CACHE_TYPE": "redis"
}
)
def init_ext(app):
db.init_app(app)
migrate.init_app(app, db)
cache.init_app(app)
App/models.py里面的代码:目前为空
App/settings.py里面的代码
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
def get_db_url(dbinfo):
engine = dbinfo.get("ENGINE") or "sqlite"
driver = dbinfo.get("DRIVER") or "sqlite"
user = dbinfo.get("USER") or ""
password = dbinfo.get("PASSWORD") or ""
host = dbinfo.get("HOST") or ""
port = dbinfo.get("PORT") or ""
name = dbinfo.get("NAME") or ""
return "{}+{}://{}:{}@{}:{}/{}".format(engine, driver, user, password, host, port, name)
class Config:
# 开发环境
DEBUG = False
# 测试环境
TESTING = False
# 数据库
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = "123456789"
SESSION_TYPE = "redis"
# 开发环境
class DevelopConfig(Config):
DEBUG = True
dbinfo = {
"ENGINE": "mysql",
"DRIVER": "pymysql",
"USER": "root",
"PASSWORD": "root",
"NAME": "Flaskrest",
"HOST": "localhost",
"PORT": "3306",
}
SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)
# 测试环境
class TestConfig(Config):
TESTING = True
dbinfo = {
# 什么数据库
"ENGINE": "mysql",
# 驱动名
"DRIVER": "pymysql",
# 数据库用户名
"USER": "root",
# 密码
"PASSWORD": "root",
# 创建的库名
"NAME": "Flaskrest",
"HOST": "localhost",
"PORT": "3306",
}
SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)
# 演示环境
class StagingConfig(Config):
dbinfo = {
# 什么数据库
"ENGINE": "mysql",
# 驱动名
"DRIVER": "pymysql",
# 数据库用户名
"USER": "root",
# 密码
"PASSWORD": "root",
# 创建的库名
"NAME": "Flaskrest",
"HOST": "localhost",
"PORT": "3306",
}
SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)
# 生产环境
class ProductConfig(Config):
DEBUG = True
dbinfo = {
# 什么数据库
"ENGINE": "mysql",
# 驱动名
"DRIVER": "pymysql",
# 数据库用户名
"USER": "root",
# 密码
"PASSWORD": "root",
# 创建的库名
"NAME": "Flaskrest",
"HOST": "localhost",
"PORT": "3306",
}
SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)
envs = {
"develop": DevelopConfig,
"testing": TestConfig,
"staging": StagingConfig,
"product": ProductConfig,
"default": DevelopConfig
}
manage.py里面的代码
from App import create_app
from flask_migrate import MigrateCommand
from flask_script import Manager
import os
env = os.environ.get('FLASK_ENV', "develop")
app = create_app(env)
manager = Manager(app)
manager.add_command("db", MigrateCommand)
if __name__ == '__main__':
manager.run()
创建数据库
登录mysql:mysql -uroot -proot;
建库:create database Flaskrest charset=utf8;
1.2、开始使用Flask-RESTful
创建App/apis.py
from flask_restful import Api, Resource
api = Api()
def init_api(app):
api.init_app(app)
class Hello(Resource):
def get(self):
return {"msg": "Hello World"}
api.add_resource(Hello, '/hello/')
运行并访问
post请求实例:
打开postman工具,访问
get传参实例
1.3、json序列化器
用装饰器例:
用函数例:
1.4、级联嵌套序列化
访问结果
1.5、列表级联嵌套序列化
访问结果
如果不用装饰器,可以直接返回marshal
1.6、序列化模板
给字段后面加attribute属性,可以改变字段名(相当于取别名)
序列化模板可以添加默认值属性default
添加url
2、Flask-RESTful 的 abort()
用法
源码
3、Flask-RESTful 请求转换
这样args就代替了request.form
它可以用来做校验
比如这里我们不给参数访问
它的其他各种用法:可以在各种位置取各种参数
本文学习笔记截至P412,18:15