Flask中before
栏目:随笔 发布时间:2019-12-08 07:54

报错信息:

# django中,假如当恳求抵达恳求1的时分直接不符合条件回来,即return httpresponse,程序将把恳求直接发给中间件1回来,然后顺次回来到恳求者,不再履行视图函数
# 在flask中,假如当恳求抵达恳求1的时分直接不符合条件回来,则会中最终一个@app.after_request中顺次回来到恳求者,不再履行视图函数,成果如下:
回来md2中止的页面,后台打印如下:

@app.after_request报错则会顺次回来成果

from flask import flask, render_template
app = flask
@app.route
def home:
 return hello 
@app.before_request
def be1:
 print
 # return 出错了 
 return none
@app.before_request
def be2:
 print
 return none
@app.after_request
def af1:
 print
 return res
@app.after_request
def af2:
 print
 # return res
 return 出错了 
if __name__ == '__main__':
 app.run

报错信息:

# 回来成果be1

@app.before_request 在恳求进入视图函数之前履行

@app.before_request 也是一个装修器,他所装修的函数,都会在恳求进入视图函数之前履行

request.path 是来读取当时的url地址假如是 /login 就答应直接经过 return none 你能够了解成经过放行

校验session中是否有user 假如没有的话,证明没有登录,所以毫不留情的 redirect 跳转登录页面

还有一个要提的 @app.before_first_request 它与 @app.before_request 极为类似或许说是如出一辙,只不过它只会被履行一次

from flask import flask
from flask import request
from flask import redirect
from flask import session
app = flask # type:flask
app.secret_key = dragonfire 
@app.before_request
def is_login: #白名单
 if request.path == /login :
 return none
 #验证session
 if not session.get:
 return redirect return none
@app.route
def login:
 return login 
@app.route
def index:
 return index 
@app.route
def home:
 return login 
app.run

@app.after_request 在呼应回来客户端之前履行 , 完毕视图函数之后

@app.after_request有必要return回来上一层的参数environ,不然会报错

@app.after_request
def foot_log:
 if request.path != /login :
 print
 return environ

根据before_request与after_request的验证登录

from flask import flask,render_template,request,redirect,session
app = flask
app.secret_key = sdsfdsgdfgdfgfh 
@app.before_request
def process_request:
 if request.path== /login :
 return none
 if not session.get:
 return redirect
 return none
@app.after_request
def process_response:
 print
 return response
@app.route
def login:
 if request.method== get :
 return render_template
 else:
 # print #这个里边什么都有,相当于body
 username = request.form.get
 password = request.form.get
 if username== annie and password== 123 :
 session[ user_info ] = username
 # session.pop #删去session
 return redirect
 else:
 # return render_template
 return render_template
上一篇:没有了
服务热线