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"