• Flask中的before_request after_request


    1.@app.before_request 在请求(request)之前做出响应

    @app.before_request 也是一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行

    2.@app.after_request 在响应(response)之前做出响应

    实例 

    复制代码
    from flask import Flask,render_template,session,jsonify,request,redirect,send_file
    app = Flask(__name__)
    app.secret_key = "$%^Y&U*I*(&*"
    
    #  在请求进入视图函数之前 做出响应,只执行一次
    @app.before_first_request
    def bfe():
        print("111111111")
        # return send_file("settings.py")
    
    #  在请求进入视图函数之前 做出响应
    @app.before_request
    def be1():
        print("be1")
        if request.path == "/login":
            return None
        if not session.get("user"):
            return redirect("/login")
        return None
    
    @app.before_request
    def be2():
        print("be2")
        return None
    
    @app.before_request
    def be3():
        print("be3")
        return None
    
    
    # 在视图函数处理之后 响应返回客户端之前
    @app.after_request
    def af1(res):
        print("af1")
        return res
    
    @app.after_request
    def af2(res):
        print("af2")
        return res
    
    @app.after_request
    def af3(res):
        print("af3")
        return res
    
    
    
    @app.route("/")
    def index():
        print("现在进入视图函数了")
        return jsonify({"name":1})
    
    
    @app.route("/login",methods=["GET","POST"])
    def login():
        if request.method == "POST":
            session["user"] = request.form.get("username")
            return redirect("/")
    
        return render_template("login.html")
    
    
    @app.errorhandler(404)
    def error404(arg):
        print(arg)
        return redirect("https://www.autohome.com.cn/beijing/asdfgasdfasdf")
    
    if __name__ == '__main__':
        app.run()
    
        #直接启动访问根路径的打印结果:
        # 111111111   be1   af3    af2    af1     be1    be2    be3    af3    af2    af1
        # (11111111只被打印一次就没了)
    
        # 访问login:
        # 正常情况:be1 - be2 - be3 - views - af3 - af2 - af1 # 返回顺序是定义代码时的倒叙
        # 异常情况:be1 - af3 - af2 - af1 # 异常阻塞请求的情况
    复制代码

    request.path 是来读取当前的url地址如果是 /login 就允许直接通过 return None 你可以理解成通过放行

    校验session中是否有user 如果没有的话,证明没有登录,所以毫不留情的 redirect("/login") 跳转登录页面

    还有一个要提的 @app.before_first_request 它与 @app.before_request 极为相似或者说是一模一样,只不过它只会被执行一次

     
     
    分类: Flask
     
    0
    0
     
     
     
    « 上一篇:Flask实例化的参数 及 对app的配置
  • 相关阅读:
    《PhoneApplicationPage》应用程序栏
    Blend 自定义横竖屏切换动画
    《Page》制作页面间跳转动画步骤
    《TextBox》软件键盘 SIP 的所有样式
    《ListBox》———何如实现ListBox下拉刷新和到底部自动加载
    [2]aptget的使用
    Boost asio Tutorial例子Timer.5 make error
    [5]debian5.0 install firefox latest version 安装
    C++对象的复制——具有指针成员的类的对象的复制
    内部链接与外部链接
  • 原文地址:https://www.cnblogs.com/xihuanniya/p/10452432.html
Copyright © 2020-2023  润新知