Flask 即插视图中使用 url_for 获取重定向的目标路径

Flask 框架在 0.7 版本后引入了即插视图的概念,概念在此不详细阐述,可以查看官方文档。然而因为写法的变化,对于不熟练的开发者带来了一些问题,比如我自己今天就遇到一个问题,在服务器指定重定向 redirect 时,如何用 url_for 指定到正确的视图函数上?其实,只要把即插视图理解清楚,这个问题很好解决。

即插视图本质上是用类的方式管理了原本的视图函数和URL路由,在即插视图中,as_view() 即指定了视图名称,而模块名则可以由 Blueprint 中的设置来确定。所以,假设如下情况:

  • Blueprint 指定模块名称为 main
  • 即插视图类 class LoginPage 含有分别响应 get 请求与 post 请求的方法 def get(self) & def post(self),且另有一个即插视图类 class MainPage
  • url 绑定为 url('/login', view_func=LoginPage.as_view('login')) & url('/mainpage', view_func=MainPage.as_view('mainpage'))

当一个登陆请求通过 post 发送到后台请求登陆,并且验证通过,跳转到主页(mainpage)时,如果要使用 url_for() 来重定向,那么,正确的写法是,指定模块名为 main,视图名为 mainpaige,最终写成:return redirect(url_for('main.mainpage')) 即可。

你可能感兴趣的:(Python)