zoukankan      html  css  js  c++  java
  • Flask快速入门(9) — 请求扩展

    1. before_request 请求之前

    类比django中间件中的peocess_request,在请求收到之前绑定一个函数做一些事情,函数名可以为任意

    @app.before_request
    def before_ruquest1():
        print('我是before_request1')
    

    小结:

    (1)可以写多个before_request函数

    (2)在请求之前从上往下执行

    (3)一旦 before_request 中有return返回值,请求的视图函数不会执行,已经剩下的 before_request 也不会执2

    2. after_request 请求之后

    类比django中间件中的process_response,每一个请求之后绑定一个函数,如果请求没有异常

    @app.after_request
    def after_request1(response):
        print('我是after_request')
        return response
    

    小结:

    (1)可以写多个after_resquest函数

    (2)所有的after_request是从下往上执行,和before_request相反

    (3)无论before_request有没有返回值,after_request都会执行

    (4)必须接收response,而且必须返回response

    3. before_first_request第一次请求时,与浏览器无关

    @app.before_first_request
    def before_first():
        print('我是before_first_request')
    

    小结:

    (1)项目启动后,接收到的第一个请求时,会执行该函数,后面请求时就不会再执行了

    (2)可以写多个before_first_request函数,没有返回值,写了也没有影响

    4. teardown_request

    每一个请求之后绑定一个函数,即使遇到了异常也会执行。用来检测异常,但是不能用来处理异常,可用作日志记录

    @app.teardown_request
    def teardown(e):
        print(e)
        print('我是teardown_request')
    

    小结:

    (1)这里e必须要传,是用来接收服务器抛出的异常,没有异常时,e为None

    (2)无论服务器有没有异常,都会在after_request后执行该函数

    (3)虽然能接收异常,但是没有办法处理异常

    5. errorhandler

    路径不存在时404,服务器内部错误500

    @app.errorhandler(500)
    def err_500(arg):
        return '访问人数太多,请稍等'
    
    @app.errorhandler(404)
    def err_404(arg):
        return '你访问的页面不存在'
    

    小结:

    (1)参数中的值为错误码

    (2)当服务器抛出对应状态码的异常就会执行该函数

    (3)并且该函数可以处理异常,让用户无法感知服务器错误

    (4)每一个错误码,都需要一个对应的函数进行处理

    6. template_global

    作为全局变量可以直接在前台渲染

    @app.template_global()
    def template(a1,a2):  # 函数名任意
        return a1+a2
    
    @app.route('/')
    def index():
        print('我是请求')
        return render_template('test.html')
    
    # 在test.html页面中,可以直接使用template()函数
    {{template(1,2)}}
    

    7. template_filter 过滤器

    @app.template_filter()
    def filter(a,b,c):  # 函数名任意
        return a+b+c
    
    @app.route('/')
    def index():
        print('我是请求')
        return render_template('test.html')
    
    # 在test.html页面中,可以直接使用filter()函数
    {{1|filter(2,3)}}  # 1作为第一个参数
    
  • 相关阅读:
    刚刚找到的IP地址对应地区数据库
    SQL2000中像SQL2005中的Row_Number一样获取行号
    KindEditor3.4.4版的ASP.NET版本
    使用程序代码输出论坛回复第X层楼
    IIS上启用Gzip压缩(HTTP压缩)详解(PDF)
    ASP.NET中过滤HTML字符串的两个方法
    七个受用一生的心理寓言
    Android获取其他包的Context实例然后XX(转载)
    android junit基础教程
    java获取web容器地址
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11682121.html
Copyright © 2011-2022 走看看