before_request after_request

Flask咱们已经学习不少基础知识了,如今有一个问题html

咱们如今有一个 Flask 程序其中有3个路由和视图函数,以下:git

from flask import Flask app = Flask(__name__)  # type:Flask
 @app.route("/login") def login(): return "Login" @app.route("/index") def index(): return "Index" @app.route("/home") def home(): return "Login" app.run("0.0.0.0", 5000)
简单的小程序

若是登录了,就能够访问 index 和 home 页面,若是没登陆就跳转到 login 登陆flask

要怎么解决呢, session 对, 用 session 除了 Login 函数以外的全部函数里面全校验 session 是否登陆了小程序

太麻烦了,如今我们只有3个函数,若是成百上千个怎么整啊session

装饰器,对没错,装饰器是一个很好的方案,可是啊,我如今仍是成败上千个函数,我要在每个函数定义的时候加上@装饰器,仍是很麻烦app

那么就引出了咱们要学习的第一个知识点:ide

 

1.@app.before_request 在请求(request)以前作出响应函数

from flask import Flask from flask import request from flask import redirect from flask import session app = Flask(__name__)  # type:Flask
app.secret_key = "DragonFire" @app.before_request def is_login(): if request.path == "/login": return None if not session.get("user"): return redirect("/login") @app.route("/login") def login(): return "Login" @app.route("/index") def index(): return "Index" @app.route("/home") def home(): return "Login" app.run("0.0.0.0", 5000)
解决全部问题

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

request.path 是来读取当前的url地址若是是 /login 就容许直接经过 return None 你能够理解成经过放行学习

校验session中是否有user 若是没有的话,证实没有登陆,因此绝不留情的 redirect("/login") 跳转登陆页面

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

 

2. @app.after_request 在响应(response)以前作出响应

@app.after_request def foot_log(environ): if request.path != "/login": print("有客人访问了",request.path) return environ

不多应用,可是要了解有这么个东西

 

 
 
本站公众号
   欢迎关注本站公众号,获取更多信息