flaks 钩子函数 | 中间件 | 内置对象 | Flask类视图和RESTfu

什么是钩子(中间件Middleware)
钩子或叫钩子函数,是指在执行函数和目标函数之间挂载的函数,框架开发者给调用方提供一个point-挂载点,
是一种AOP切面编程思想,
常用的钩子函数
before_first_request:   处理第一次请求之前执行,
before_request:  在每次请求之前执行,通常使用这个钩子函数预处理一些变量,实现反爬等
after_request:  注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
teardown_appcontext:  当APP上下文被移除之后执行的函数,可以进行数据库的提交或者回滚

 


 

g
global全局对象
g对象是专门用来保存用户的数据的
g对象在一次请求中的所有的代码的地方,都是可以使用的
突破变量存储位置限制,为数据传递添加了新的方式,比如我们在before_request产生一个数据在后面需要使用,
可以保存在g对象中,在其他视图函数中就可以使用这个数据,


request:
请求对象,可以获取客户端提交过来的所有请求信息


session:
会话技术,服务端会话技术的接口


current_app:
app的配置信息,app对象获取,
current app
使用获取当前app需要注意,一定要在程序初始化完成之后

 


 

 

Flask类视图 和 RESTfu

安装插件

# pip 安装
pip install flask-restful

  

创建Resource实现类  创建一个文件api 

class HelloRESTful(Resource):
  def get(self):
      return {"data":"Hello GET"}
  def post(self):
      return {'data':'hello PosT'}

 

 

 

创建一个文件urls 

#方式一: 创建并初始化
api = API(app)
#方式二: 创建,之后初始化
api = API()
api.init_app(app)
#注册路由 api.add resource(HellORESTFul,"/")

 

 

 

 字段格式化 

fields  进行定义
marshal_with  进行使用
特性

  • 显示我们设计的数据结构
  • 默认返回的数据如果在预定义结构中不存在,数据会被自动过滤
  • 如果返回的数据在预定义的结构中存在,数据会正常返回
  • 如果返回的数据比预定义结构中的字段少,预定义的字段会呈现一个默认值

定义字段输出

  • 使用字典进行定义
  • 常用都是基本类型:string,Integer

 

定义好的格式通过装饰器进行使用
@marshal_with(需要返回的数据格式),

return返回字典就ok了

class Users(Resource):
    @marshal with(user fields)

    def get(self):
        return {'msg':'呵呵','data':'没有数据', 'age':'22','private_data':'表中数据"}    

  

案例展示   Nested  嵌套字典 

#格式化字段
usermodel_fileds ={
  'id':fields.Integer,
  'name': fields.string,
}
user2_fields ={   'msg':fields.string(default='ok'),   'status':fields.Integer(default=1),   'data':fields.Nested(usermodel_fileds) // 这个字段要遵循上一个字段的定义
}

  

嵌套列表   fields.List (usermodel_fileds) 嵌套列表 

#格式化字段
usermodel_fileds ={
  'id': fields.Integer,
  'name': fields.string,
} users3_fields ={   'status':fields.string(default=1),   'msg': fields.string,   'data': fields.List(fields.Nested(usermodel_fileds)
)

 

url

连接字段

  • 就是将当前数据的操作api暴露出来
  • 根据提供的ur1和唯一标识进行数据操作
#格式化字段
usermodel_fileds = {
  'id':fields.Integer,
  'name': fields.string,
  'url':fields.Url('id', absolute=True)
}
# 在add_resource中提供对应的 endpoint api.add resource(Users4, "/user4/', endpoint='id')

  

接受前台提交的参数

 

参数解析  reqparse    apis 文件代码 

parser =reqparse.RequestParser(
parser.add_argument('name',type=str,required=True, help='name是必需的参数')
class User4Resource(Resource):
  def get(self):
  #获取参数
  args =parser.parse args()
  name = args.get('name')
  return {'name': name}

  

 

 

 

 

posted @ 2024-11-01 11:57  我在春天等伱  阅读(23)  评论(0)    收藏  举报