一、应用场景
-
场景:
- 假设在新增信息页面,完成新增操作之后需要跳转到展示页面;
- 展示页面是个动态页面,若有参数则展示相关结果,若无参数则展示全部信息。
-
解决:
- 使用
url_for
生成URL,再使用redirect()
方法完成路径的重定向。实现当完成添加的逻辑后,展示跳转的逻辑。
- 使用
二、使用url_for()函数的优点
- 相比使用相对路径,
url_for()
函数有以下几个优点:
-
比直接使用URL的描述性更好;
-
可以只在一个地方改变URL,而不用到处乱找,可维护性好;
-
url_for()
函数生成的URL创建会处理特殊字符的转移和Unicode数据,比较直观; -
url_for()
函数生成的路径总是绝对路径,可以避免使用相对路径导致的一些问题; -
如果应用是放在URL根路径之外的地方(如在
/myapplication
中,不在/
中),url_for()
也可以妥善处理。
三、url_for()的用法
-
url_for()
可以根据视图函数名生成视图的路由地址; -
语法:
url_for(视图函数名, *)
-
视图地址:str类型,可以是视图函数名,也可以是由蓝图和视图函数组成的地址;
-
*:允许传递参数。
-
-
用法:
-
用法一:
url_for(视图函数名)
-
用法二:
url_for(“蓝图名.视图函数名”)
-
3.1 路由生成
- 使用
url_for(视图函数名)
即可返回对应视图函数的URL。
from flask import Flask, url_for
app = Flask(__name__)
@app.route("/world/")
def hello():
return url_for("hello")
if __name__ == '__main__':
app.run(port=5050, debug=True)
3.2 蓝图路由生成
- 使用
url_for(蓝图名.视图函数名)
即可返回对应视图函数的url。
from flask import Flask, Blueprint, url_for
app = Flask(__name__)
login_api = Blueprint("login", __name__, url_prefix="/login")
index_api = Blueprint("index", __name__, url_prefix="/index")
@login_api.route("")
def login():
print("登录成功,跳转到首页。。")
return url_for("index.index")
@index_api.route("")
def index():
print("这里是首页")
return {"code":0, "msg":"success"}
if __name__ == '__main__':
app.register_blueprint(login_api)
app.register_blueprint(index_api)
app.run(port=5050, debug=True)
三、路由跳转
-
重定向Redirect就是通过各种方法,将各种网络请求重新定个方向转到其它位置。
-
可以在生成视图的路由地址后,使用
redirect()
方法实现路由的跳转。-
redirect()
使得一个路由地址A,与另一个路由地址B联系起来,执行A时会跳转执行B。 -
语法:
flask.redirect(location, code=302, Response=None)
-
location:一个连接地址,可以使用
url_for()
函数得到,也可以是静态文件地址; -
code:HTTP协议中的一个状态码;
-
Reponse:一个响应类。
-
-
用法:
- 用法一:
redirect(url地址)
- 用法二:
redirect(路由地址)
(可以结合url_for()
使用)
- 用法一:
-
from flask import Flask, Blueprint, url_for, redirect
app = Flask(__name__)
login_api = Blueprint("login", __name__, url_prefix="/login")
index_api = Blueprint("index", __name__, url_prefix="/index")
@login_api.route("")
def login():
print("登录成功,跳转到首页。。")
return redirect(url_for("index.index"))
@index_api.route("")
def index():
print("这里是首页")
return {"code":0, "msg":"success"}
if __name__ == '__main__':
app.register_blueprint(login_api)
app.register_blueprint(index_api)
app.run(port=5050, debug=True)
示例:login成功跳转到index路由。