flask之request扩展
引子:
和django的中间件基本一样
代码:
# -*- coding: utf-8 -*-
"""
请求扩展
"""
from flask import Flask,redirect,request,render_template,session
app=Flask(__name__)
app.secret_key="kljkljlk"
@app.before_first_request
def first(*args):
"""
只有 第一次操作
:param args:
:return:
"""
pass
# 多个@app.before_request 按照顺序加载 执行顺序是正序
@app.before_request
def before_req(*args,**kwargs):
"""
类似django 的中间中的 process_request
:param args:
:param kwargs:
:return:
"""
if request.path == "/login":
return None
user=session.get("user_info")
if user:
return None # 实际上不返回 也是返回None 并不会打断后续的处理 但是如果返回的非None就会打断
print("请求之前1")
return redirect("/login")
@app.before_request
def before_req2(*args,**kwargs):
"""
类似django 的中间中的 process_request
:param args:
:param kwargs:
:return:
"""
if request.path == "/login":
return None
user=session.get("user_info")
if user:
return None # 实际上不返回 也是返回None 并不会打断后续的处理 但是如果返回的非None就会打断
print("请求之前2")
return redirect("/login")
# 多个@app.after_request 按照顺序加载 执行顺序是倒序
# 但是 如before_request 存在return True 则 执行所有的response 这和django 的老版本一致
@app.after_request
def process_response1(response): #(*args,**kwargs)
"""
类似于django 的 中间件的 process_response 需要有返回值
默认是 是有一个resposne 的 参数里
:param args:
:param kwargs:
:return:
"""
print("process_response1 ")
return response
@app.after_request
def process_response2(response): #(*args,**kwargs)
"""
类似于django 的 中间件的 process_response 需要有返回值
默认是 是有一个resposne 的 参数里
:param args:
:param kwargs:
:return:
"""
print("process_response2 ")
return response
@app.errorhandler
def error_404(msg):
"""
定制异常
:param msg:
:return:
"""
return msg
@app.route("/detail/<int:nid>",methods=["GET"])
def detail(nid):
print("in detail ")
return nid
@app.route("/index",methods=["GET"])
def index():
return "index"

浙公网安备 33010602011771号