iis怎么创建网站,做360网站首页软件,南宁公司官网建站,中关村在线appflask中也有类似与django中的中间件#xff0c;只不过是另一种写法#xff0c;但是他们的作用是一样的#xff0c;下面我们就一一介绍#xff1a;
1.before_request
作用 : before_request 相当于 django 中的 process_request#xff0c;每一个请求在被处理前都会经…flask中也有类似与django中的中间件只不过是另一种写法但是他们的作用是一样的下面我们就一一介绍
1.before_request
作用 : before_request 相当于 django 中的 process_request每一个请求在被处理前都会经过这个方法应用 : 用户登录认证这样避免了每一个视图函数都加用户登录认证的装饰器注意 : before_request 的返回值为 None 才会往后走, 否则直接返回你的返回值,如果定义了after_request那么会接着它执行, 最终本次请求响应结束
from flask import Flask, request, render_template, session, url_for, redirect, flash, get_flashed_messages
from markupsafe import Markupapp Flask(__name__)
app.debug Trueapp.secret_key the_secret_keyapp.before_request
def process_request(*args, **kwargs):# 判断访问的是不是登入路径,是的话返回None继续往后走if request.path /login:return Noneelse:# 不是的话判断是否携带用户信息(判断是否登入状态)username session.get(username)print(username, username)if username:return Noneelse:# 如果没有,则重定向到登入界面return redirect(/login)app.route(/login)
def login():username request.args[username]print(username)if username shawn:session[username] usernamereturn redirect(/index)else:return render_template(login.html)app.route(/index)
def index():return render_template(index.html)if __name__ __main__:app.run()2. after_request 作用 : 类比django中间件中的process_response如果请求没有出现异常的情况下, 会在请求返回return之前执行. 但是如果有多个顺序是从下往上执行. 与Django中process_response的区别
Django中当请求返回return后, 会从当前位置结束接着从当前位置response出去Flask中的after_request请求返回return之后, 后面的response也会一个个走完
app.after_request # 后执行
def process_response1(response):print(process_response1)return responseapp.after_request # 先执行
def process_response2(response):print(process_response2)return response3.before_first_request
作用 : 顾名思义, 项目启动第一次请求时触发执行应用 : 项目初始化用来保证以后项目只要不重启就不再继续执行
app.teardown_request
def ter(e):print(不管什么情况都会触发即便遇到了异常)4. teardown_request
效果 : 不管什么情况, 都会触发, 即便遇到了异常, 并且返回return没有任何效果, 无法控制返回结果应用 : 记录日志
app.teardown_request
def ter(e):print(不管什么情况都会触发即便遇到了异常)5.errorhandler
作用: 绑定错误的状态码进而可以捕获服务器的错误, 并返回对应的错误页面
app.errorhandler(404)
def error_404(arg):return 404页面找不到了...6.template_global
作用: 全局的标签, 在任意的html页面中就可以直接使用, 不需要在render_template中传递参数以后才能使用
app.template_global()
def gl(a1, a2):return a1 a2# html 文件中使用
{{ gl(1,2) }}7.template_filter
作用: 全局的过滤器, 在任意的html页面中就可以直接使用, 不需要在render_template中传递参数以后才能使用
app.template_filter()
def db(a1, a2, a3):return a1 a2 a3# html 文件中使用,相比较Django的过滤器最多只能传两个参数,这里可以传多个
# 1传给a1,2--a2,3--a3
{{ 1|db(2,3) }}详细Flask请求扩展及中间件 - 给你骨质唱疏松 - 博客园 (cnblogs.com)