flask flask-restful 前后端分离
前后端分离区别
#前后端不分离:
render template('index.html',users=users)
# 前后端分离:
后台返回json字符串 : jsonify()
前端用ajax 接受数据
Flask类视图 和 RESTfu 主要用于前后端分离
安装 flask-restful
pip install flask-restful
目录重构
创建一个文件apis 文件
# apis 文件
from flask restful import Resource #类视图:CBV Class Based View #视图函数:FBV Function Based View class HelloResouce(Resource): def get(self): return'get请求 def post(self): return'post请求
exts 文件代码
# exts文件
from flask sqlalchemy import sQLAlchemy from flask migrate import Migrate from flask restful import Api # 引入库
db = SQLAlchemy() migrate = Migrate() api = Api() // 创建库
def init_exts(app): db.init_app(app=app) migrate.init_app(app=app, db=db)
# 初始化 api.init app(app=app)
再创建一个路由文件 urls 文件
from .exts import api from .apis import * # 路由 前面定义的类 后面是路径 api.add_resource(HelloResouce, '/hello/')
init 文件 代码
from flask import Flask from .exts import init_exts // 引入第三方插件
from .urls import * // 必须导入路由
def create_app(): app = Flask(_name_)
app 文件代码
from App import create_app app = create_app() if __name__ = '__main__': app.run(debug=True)
# 初始化插件
init exts(app=app)
return app
字段格式化
定义字段输出
使用字典进行定义
常用都是基本类型:string,Integer
#格式化字段
user_fields ={
msg': fields.string,
status':fields.Integer,
data':fields.string(attribute='private data')
default data': fields.string(default='1')
}
定义好的格式通过装饰器进行使用
注意 , 格式化字段中 没有定义的字段, 返回数据中有的也不会显示 ,
格式化字段中 , 有定义的, 返回数据中没有的 , 可以使用默认值
# @marshal_with( 需要返回的数据格式 ) , return返回字典就ok了
class Users(Resource):
@marshal_with(user_fields)
def get(self):
return{'msg':'呵呵','data':'没有数据','age':'22','private_data':'表中数据"}
字段格式化的 第二种方式 是一个对象 data': fields.Nested(user_fields)
# 定义字段格式化
user_fields ={ 'id': fields.Integer, 'name': fields.string. 'age': fields.Integer
} ret_fields2={ 'status':fields.Integer, 'msg': fields.string, # user对象 'data': fields.Nested(user_fields)
}
字段格式化 第三种 对象是列表
# 字段格式化
user_fields2 ={
name':fields.string,
age':fields.Integer,
}
ret_fields3={
status':fields.Integer,
msg': fields.string,
data': fields.List(fields.Nestedtuser fields2))
}
参数解析