flask在重定向时通过redirect函数执行重定向的url,底层通过response.headers['location']=location修改response的header,浏览器在收到响应时会先检查status_code是否时30x的状态码,若是,则判定为后台服务要求重定向到其他页面,然后根据‘location‘字段判断重定向的位置,给用户展示的就是重定向后的页面了。
redirect()源码:
1.redirect()重定向:
from flask import Flask, request, redirect
app = Flask(__name__)
@app.route('/')
def index():
# 判断是否已经登录,若未登录,重定向到登录页面
if request.args.get('username') is None:
return redirect('/login')
# 若已登录,返回hello
return 'hello'
@app.route('/login')
def login():
return 'login page'
if __name__ == '__main__':
app.run(debug=True, port=6000)
2.redirect(url_for())重定向:
endpoint(端点):flask中将url和对应的视图函数的绑定关系称为endpoint(端点)。
url_for():第一个参数为endpoint;url可能会改变,但是endpoint一般不会改变;
⭐️第一个参数后面的参数会在重定向时作为参数传给url。
from flask import Flask, request, redirect, url_for
app = Flask(__name__)
@app.route('/')
def index():
# 判断是否已经登录,若未登录,重定向到登录页面
if request.args.get('username') is None:
return redirect(url_for('login', user_name='chuntian')) # url_for():参数为endpoint,url会改变,但是endpoint一般不会改变
# 若已登录,返回hello
return 'hello'
@app.route('/login', endpoint='login')
def login():
return 'login page'
if __name__ == '__main__':
app.run(debug=True, port=6000)