flask flask-restful 前后端分离
前后端分离区别
#前后端不分离:
render template('index.html',users=users)
# 前后端分离:
后台返回json字符串 : jsonify()
前端用ajax 接受数据
Flask类视图 和 RESTfu 主要用于前后端分离
安装 flask-restful
1 | pip install flask - restful |
目录重构
创建一个文件apis 文件
1 2 3 4 5 6 7 8 | # apis 文件<br>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 文件代码
1 2 3 4 5 6 7 8 9 10 | # exts文件<br>from flask sqlalchemy import sQLAlchemy from flask migrate import Migrate from flask restful import Api # 引入库<br> db = SQLAlchemy() migrate = Migrate() api = Api() / / 创建库<br> def init_exts(app): db.init_app(app = app) migrate.init_app(app = app, db = db)<br> # 初始化 api.init app(app = app) |
再创建一个路由文件 urls 文件
1 2 3 4 | from .exts import api from .apis import * # 路由 前面定义的类 后面是路径 api.add_resource(HelloResouce, '/hello/' ) |
init 文件 代码
1 2 3 4 | from flask import Flask from .exts import init_exts / / 引入第三方插件<br> from .urls import * / / 必须导入路由 <br><br> def create_app(): app = Flask(_name_) |
app 文件代码
1 2 3 4 | from App import create_app app = create_app() if __name__ = '__main__' : app.run(debug = True )<br><br> # 初始化插件<br> init exts(app=app)<br> return app |
字段格式化
定义字段输出
使用字典进行定义
常用都是基本类型:string,Integer
1 2 3 4 5 6 7 8 | #格式化字段 user_fields = { msg': fields.string, status':fields.Integer, data ':fields.string(attribute=' private data') default data ': fields.string(default=' 1 ') } |
定义好的格式通过装饰器进行使用
注意 , 格式化字段中 没有定义的字段, 返回数据中有的也不会显示 ,
格式化字段中 , 有定义的, 返回数据中没有的 , 可以使用默认值
1 2 3 4 5 | # @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)
1 2 3 4 5 6 7 8 9 | # 定义字段格式化 <br><br>user_fields ={ 'id' : fields.Integer, 'name' : fields.string. 'age' : fields.Integer<br>} ret_fields2 = { 'status' :fields.Integer, 'msg' : fields.string, # user对象 'data' : fields.Nested(user_fields)<br>} |
字段格式化 第三种 对象是列表
1 2 3 4 5 6 7 8 | # 字段格式化 user_fields2 = { name':fields.string, age':fields.Integer,<br>} ret_fields3 = { status':fields.Integer, msg': fields.string, data': fields. List (fields.Nestedtuser fields2))<br>} |
参数解析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律