zoukankan      html  css  js  c++  java
  • Flask中那些特殊的装饰器

    模板相关的装饰器

    @app.template_global()

    用法:

    @app.template_global()  # 记得加括号
    def jiafa(a, b):  # 这个方法每调用一次就需要传一次, 将他做成一个全局的就用这么麻烦了
        return int(a) + int(b)

    在模板中这样使用

    <h2>{{ jiafa(100, 30)}}</h2>

    可以在全局范围的模板中使用这个函数, 而不用通过参数传到模板中 

    @app.template_filter()

    用法:

    @app.template_filter()
    def jianfa(a, b, c):
        return a - b - c

    在模板中这样使用

    <h2>{{ 100|jianfa(100, 300) }}</h2>

    类似于django中间件的装饰器

    @app.before_request

    用法:

    @app.before_request
    def confirm():
        """
        在执行视图函数之前执行
        :return:
        """
        if session.get('auth') or request.path == "/login" or request.path.startswith('/static'):
            return None
        else:
            next_url = request.path
            return redirect('/login?next=%s' % (next_url,))

    @app.after_request

    用法:

    @app.after_request
    def access_login(response):
        """
        视图函数执行完毕并执行成功后执行
        :param response: 必须接受一个response
        :return: 
        """
        ip = request.remote_addr
        url = request.path
        print("%s访问 %s 成功" % (ip, url))
        return response  # 必须返回一个response对象

    @app.errorhandler(404)

    @app.errorhandler(404)  # 404: 监听的错误码
    def error(args):
        """
        当出现某个错误状态码时会调用这个函数
        :param args: 错误信息
        :return:
        """
        return render_template("error.html")

    不同装饰器的执行的顺序

    多个被装饰器装饰的函数的执行顺序是什么呢?

    @app.after_request: 按照代码顺序, 从上往下执行

    @app.after_request: 按照代码顺序, 从下往上执行

    @app.errorhandler(404): 监听到哪一个错误码就执行对应的函数

     

  • 相关阅读:
    Nginx模块fastcgi_cache的几个注意点
    Nginx的fastcgi_cache
    Nginx Location 语法,与简单配置[转]
    nginx location 匹配顺序
    Amoeba基本配置
    LVS的DR模式配置
    Keepalived安装及初步使用
    HAProxy安装及初步使用
    lvs nginx HAProxy优缺点
    Redis安装及初步使用
  • 原文地址:https://www.cnblogs.com/594504110python/p/10134300.html
Copyright © 2011-2022 走看看