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("")
# 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中的before_request after_request的更多相关文章
- Flask中的before_request装饰器和after_request装饰器以及WTForms组件
一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...
- Flask中的before_request和after_request
1.@app.before_request 在请求(request)之前做出响应 @app.before_request 也是一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行 2.@app. ...
- Flask中before_request与after_request使用
目录 1.前提,装饰器的弊端 2.before_request与after_request 2.1 before_request分析: 2.2 after_request分析: 3.before_re ...
- python 全栈开发,Day120(路由系统, 实例化Flask的参数, 蓝图(BluePrint), before_request after_request)
昨日内容回顾 1.Flask: from flask import Flask app = Flask(__name__) # 从源码中可以看出,Flask集成的run方法是由werkzeug中的ru ...
- Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler
一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 @app.before_request # 在请求进入视图函数之前 @app.after_request # 在请求结束视图函数之后 响应 ...
- Python框架学习之Flask中的视图及路由
在前面一讲中我们学习如何创建一个简单的Flask项目,并做了一些简单的分析.接下来在这一节中就主要来讲讲Flask中最核心的内容之一:Werkzeug工具箱.Werkzeug是一个遵循WSGI协议的P ...
- (三)flask中的请求钩子函数
请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图 ...
- flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据.可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子.下面的这个例子会使用random随机产生一个0 ...
- flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...
随机推荐
- IOS 发布 升级新版本
ERROR ITMS-90725: "SDK Version Issue. ERROR ITMS-90725: "SDK Version Issue. This app was b ...
- 关于游览器 cookie的操作类
var Cookie = { getCookie : function(c_name,is){ var value = this._getCookie(c_name); if(JSON &&a ...
- Aplication的意义和生命周期,与Context的关系,以及关于Aplication和Context相关问题的记录和解决办法
Context详解地址链接: http://blog.csdn.net/qinjuning/article/details/7310620 Application是一个应用中有且仅有一个的全局共享变量 ...
- cxGrid类似pagecontrol的效果
1.对TcxGrid创建多个Level 2.对TcxGrid的TcxGridLevelOptions的TabsForEmptyDetail设置为True 3.再设置DetailTabsPosition ...
- JVM系列1:Java内存区域
JVM系列主要分享自己都虚拟机的理解,我自学时的知识框架多来源于<深入理解Java虚拟机_JVM高级特性与最佳实践>这本书,感兴趣的朋友可直接去阅读这本书. 本系列暂定有3部分,它们是学习 ...
- cdnbest站点里设置防盗链
设置需求只允许 test.kangleweb.com 访问 ,其他网站链接全部拒绝 (注:如果test.kangleweb.com是用https访问,那引用的内容地址www447.yivpn.cn也 ...
- Spring使用Jackson处理json数据
1.搭建SpringMVC+Spring环境 2.配置web.xml.SpringMVC-config.xml <?xml version="1.0" encoding=&q ...
- MYSQL 时间类型
常见四种:DATE, TIME, DATETIME, TIMESTAMP DATE: 只表示年月日,YYYY-MM-DD TIME: 只表示时分秒,HH-mm-SS DATETIME: DATE和TI ...
- 50 【Go版本变化】
Go的版本介绍:https://golang.org/project/ https://golang.org/doc/go1.4 #Go1.4# 语言层面变化较少,但是编译器而言是有巨大的突破的,体现 ...
- pythone函数基础(8)内置函数学习
内置函数学习# sorted# map# filter# max# sum# round# chr# ord# dir# bool# eval# exec# zipimport mathres = m ...
