09.路由跳转

发布时间 2023-11-19 19:06:53作者: 想要暴富的小男孩

路由跳转

应用场景

  • 场景:
    • 假设在新增信息页面,完成新增操作之后需要跳转到展示页面。
    • 展示页面是个动态页面,它的逻辑是,如果有参数,则展示相关参数的结果,如果没有参数,则展示所有的信息。
  • 解决:
    • 使用 url_for() 生成 url ,再使用 redirect() 方法完成路径的重定向。实现当完成添加的逻辑后,跳转展示的逻辑。

使用 url_for() 函数的优点

相比使用相对路径,url_for() 函数有以下几个优点:

  1. 比直接使用 URL 的描述性更好。

  2. 可以只在一个地方改变 URL ,而不用到处乱找,可维护性好。

  3. url_for() 函数生成的 URL 创建会处理特殊字符的转义和 Unicode 数据,比较直观。

  4. url_for() 函数生成的路径总是绝对路径,可以避免使用相对路径导致的一些问题。

  5. 如果应用是放在 URL 根路径之外的地方(如在 /myapplication 中,不在 / 中),url_for() 也可以妥善处理。

url_for() 的用法

  • url_for() 可以根据视图函数名生成视图的路由地址。
  • 语法:url_for(视图函数名, *)
    • 视图地址:str 类型,可以是视图函数名,也可以是由蓝图和视图函数组成的地址。
    • *:允许传递参数。
  • 用法:
    • 用法一:url_for(视图函数名)
    • 用法二:url_for("蓝图名.视图函数名")

路由生成

使用 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=5055)

可以看到响应返回了生成的路由地址。

蓝图路由生成

使用 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("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(index_api)
app.register_blueprint(login_api)
app.run(debug=True, port=5055)

页面中可以看到响应的内容中返回了生成的路由地址。

路由跳转

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置。

可以在生成视图的路由地址后,使用 redirect() 方法实现路由的跳转。

  • redirect() 使得一个路由地址 A 与另一个路由地址 B 联系起来,执行 A 的时候会跳转执行 B。
  • 语法:flask.redirect(location, code=302, Response=None)
    • location 是一个链接地址,可以使用 url_for() 函数得到,也可以是静态文件地址。
    • code HTTP 协议中的一个状态码。
    • Response 是一个响应类。
  • 用法:
    • 用法一:redirect(url地址)
    • 用法二:redirect(路由地址)(可以结合 url_for 使用)
    • from flask import Flask, Blueprint, url_for, redirect

      # 创建 Flask 应用程序实例
      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")
      return redirect(url_for("index.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=5055)

    • 相应结果为:{"code":0,"msg":"success"}说明已经成功的跳转到了 index 路由。