flask——路由跳转

一、url_for函数用法

image

1-1 路由生成    使用url_for(视图函数名)即可返回对应视图函数的url

from flask import Flask, url_for
#创建Flask应用程序实例
app = Flask(__name__)
@app.route("/helloworld")
def hello():
    return url_for("hello")
#运行应用程序
if __name__== "__main__":
    app.run(debug=True, port=5001)

1-2 蓝图路由生成     使用url_for("蓝图名.视图函数名")即可返回对应视图函数的url

from flask import Flask, Blueprint, url_for
#创建Flask应用程序实例
app = Flask(__name__)

login_api = Blueprint("login", __name__, url_prefix="/login")
index_api = Blueprint("first_page", __name__, url_prefix="/index")

@login_api.route("")
def login():
    print("登录,成功后跳转到首页")
    return url_for("first_page.index")

@index_api.route("")
def index():
    print("首页")
    return{"code":0, "msg": "success"}


if __name__ == "__main__":
    app.register_blueprint(index_api)
    app.register_blueprint(login_api)
    app.run(debug=True, port=5001)

二、重定向 

语法:

flask.redirect(location, code=302, Response=None)

location是一个链接地址: 可以使用 url_for()函数得到,也可以是静态文件地址。
code HTTP协议中的一个状态码。
Response 是一个响应类。

用法:
用法一: redirect(url地址)
用法二: redirect(路由地址)(可以结合url_for使用)

login_api = Blueprint("login", __name__, url_prefix="/login")
index_api = Blueprint("first_page", __name__, url_prefix="/index")

@login_api.route("")
def login():
    print("登录,成功后跳转到首页")
    # return url_for("first_page.index")
    # 跳转到首页路由,执行对应的视图函数
    return redirect(url_for("first_page.index"))

@index_api.route("")
def index():
    print("首页")
    return{"code":0, "msg": "success"}

 

三、跨域概念:当一个请求URL的协议、域名、端口三者之间的任意一个与当前页面URL不同即为跨域。

安装flask-cors:  pip install flask-cors

解决跨域问题分为两种
  1) 针对全局所有的APICORS(app)
  2) 针对特定的API@cross_origin

 1 #后端服务代码
 2 from flask import Flask, render_template
 3 from flask_cors import CORS
 4 
 5 app = Flask(__name__)
 6 #第一种:全局解决跨域问题
 7 CORS(app, supports_credentials=True)
 8 
 9 @app.route('/hello')
10 def hello():
11     return "hello world"
12 
13 
14 #第二种:局部解决跨域问题
15 # @cross_origin(supports_credentials=True)
16 @app.route('/cors')
17 def cors():
18     return render_template('cors.html')
19 
20 if __name__== '__main__':
21     app.run(debug=True,port=5001)

 

posted @ 2025-08-20 16:58  Alieen617  阅读(18)  评论(0)    收藏  举报