zoukankan      html  css  js  c++  java
  • Flask 中的 特殊装饰器before_request/after_request

    before_request :在请求收到之前绑定一个函数做一些事情。 
    after_request: 每一个请求之后绑定一个函数,如果请求没有异常。 
    teardown_request: 每一个请求之后绑定一个函数,即使遇到了异常。

    @app.before_request		在请求进入视图函数之前做出响应
    @app.after_request		在请求结束视图函数之后 - 响应返回客户端之前
    
    @app.before_request
    def be1():
    	return None
    
    @app.after_request
    def af1(res):
    	return res
    
    正常执行顺序: be1 - be2 - be3 - views - af3 - af2 - af1
    异常执行顺序:be1 - af3 - af2 - af1
    
    @app.errorhandler(404)	重定义错误提示
    def error404(args) args:错误信息
    

    使用before_request来做权限和用户检查

    因为使用restful方式,因此每次用户访问都会上传带入auth_key,如jwt等,因此可在@app.before_request中做权限的检查。

    @app.app.before_request
    def before_request():
        #可在此处检查jwt等auth_key是否合法,
        #abort(401)
        #然后根据endpoint,检查此api是否有权限,需要自行处理
        #print(["endpoint",connexion.request.url_rule.endpoint])
        #abort(401)
        #也可做ip检查,以阻挡受限制的ip等

    这样,可对权限做集中管理

    在最路由之前添加before_request,打印请求参数可以起到“拦截器”的作用

    # @app.before_request 等同下面的 application.before_request
    
    @application.before_request
    def print_request_info():
        print("请求地址:" + str(request.path))
        print("请求方法:" + str(request.method))
        print("---请求headers--start--")
        print(str(request.headers).rstrip())
        print("---请求headers--end----")
        print("GET参数:" + str(request.args))
        print("POST参数:" + str(request.form))
    
  • 相关阅读:
    将时间超过万的数字转换为保留两位小数的阅读
    获取日期的最早和最晚时间
    Mybatis 关联查询分页问题的解决
    使用 java stream 获取两个集合之间的交集.差集
    使用 Stream 流对集合排序,包含对空属性的处理
    SpringBoot 多个子项目中下载 excel 报错解决方法
    单元测试捕获异常的写法
    单元测试用例需要登录信息的写法
    openwaf实战
    70个python练手项目
  • 原文地址:https://www.cnblogs.com/niuli1987/p/10451548.html
Copyright © 2011-2022 走看看