前后端分离区别
#前后端不分离:
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))
}
参数解析
标签:string,flask,fields,app,分离,data,import,restful From: https://www.cnblogs.com/longly1111/p/18469803