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): 监听到哪一个错误码就执行对应的函数

     

  • 相关阅读:
    HDU 六度分离
    HDU 找到唯一的冠军
    最短路径问题
    (拓扑排序)确定比赛名次
    Shortest Prefixes
    2768: [JLOI2010]冠军调查( 最小割 )
    BZOJ 1927: [Sdoi2010]星际竞速(最小费用最大流)
    BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
    BZOJ 2424: [HAOI2010]订货(最小费用最大流)
    BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
  • 原文地址:https://www.cnblogs.com/594504110python/p/10134300.html
Copyright © 2011-2022 走看看