[Python] Flask中特殊装饰器的使用

2371 0
王子 2023-2-25 16:34:46 | 显示全部楼层 |阅读模式
(1)@app.before_request

请求到达视图函数之前,进行自定义操作,类似django中间件中的process_request,在app中使用则为全局,在蓝图中使用则针对当前蓝图
注意正常状态下return值必须为None
(2)@app.after_request

响应返回到达客户端之前,进行自定义操作,类似jango中间件中的process_response,在app中使用则为全局,在蓝图中使用则针对当前蓝图
注意正常状态下视图函数必须定义一个形参接收response对象,并通过return response返回
(3)@app.errorhandler()

错误状态码捕获执行函数,装饰器参数务必是4xx或者5xx的int型错误状态码
(4) @app.template_global() :定义装饰全局模板可用的函数,直接可在模板中进行渲染使用

@app.template_filter(): 定义装饰全局模板可用的过滤器函数,类似django中的自定义过滤器,直接可在模板中使用
这两个特殊装饰器主要用在模板渲染!!!
import apps
from flask import request, session, redirect

app = apps.create_app()

@app.before_request
def before1():
    print("before1", request)

@app.before_request
def before2():
    print("before2")
    if request.path == "/":
        return None
    else:
        #这里抛出了一个异常,会被@app.errorhandler(Exception)
        # 捕获到。
        raise Exception("hahaha")

@app.before_request
def before3():
    print("before3")

@app.after_request
def after1(res):
    print("after1")
    return res

@app.after_request
def after2(res):
    print("after2")
    return res

@app.after_request
def after3(res):
    print("after3")
    return res

# 处理异常,接受参数,可以重定向到指定页面
@app.errorhandler(Exception)
def error(e):
    print("error")
    return redirect("/")

@app.route("/login")
def login():
    print("login")
    return "login"

@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'

if __name__ == '__main__':
    app.run()到此这篇关于Flask中特殊装饰器的使用的文章就介绍到这了,更多相关Flask 特殊装饰器内容请搜索中国红客联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持中国红客联盟!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行