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"

  

posted @ 2021-02-03 22:59  Yuan_x  阅读(88)  评论(0编辑  收藏  举报