flask flask-restful 前后端分离

longly1111 / 2024-10-21 / 原文

 

前后端分离区别

#前后端不分离:
  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))
}

 

参数解析