重定向回Flask

kad*_*ian 12 python redirect flask

我有一个名为Item的数据库表.Item有一个status属性,可以是

new
todo
doing
done
Run Code Online (Sandbox Code Playgroud)

在我的网站上,我有两个显示Item表的视图.

  • 视图1显示所有项目(具有状态列).
  • 视图2 显示具有状态的项目todo.

根据项目状态,用户可以执行某些操作("移至待办事项","移至执行","移至完成").

如果您考虑视图1和视图2,它们都有共同点,它们包含具有状态的项目todo.所以两者都有一个Button链接到一个名为的URL

/Item/<id>/moveToDoing
Run Code Online (Sandbox Code Playgroud)

其中id - 项目状态设置为"正在进行".

现在我希望将用户重定向回他点击按钮的位置(View 1或View 2).

我的问题是:

  1. 如何使用Flask做到这一点?我觉得 http://flask.pocoo.org/snippets/62/并不是我需要的,因为我在这里没有带有公式的POST请求.(我是不是该?)
  2. 我是以正确的方式做到这一点还是有关于如何正常解决这个问题的惯例?

Smo*_*moe 33

我正在使用这里推荐的辅助函数:http://flask.pocoo.org/docs/reqcontext/

def redirect_url(default='index'):
    return request.args.get('next') or \
           request.referrer or \
           url_for(default)
Run Code Online (Sandbox Code Playgroud)

在视图中使用它

def some_view():
    # some action
    return redirect(redirect_url())
Run Code Online (Sandbox Code Playgroud)

没有任何参数,它会将用户重定向回他来自的地方(request.referrer).您可以添加get参数next以指定URL.例如,这对oauth很有用.

instagram.authorize(callback=url_for(".oauth_authorized",
                                                next=redirect_url(),
                                                _external=True))
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因应该没有引用者,我还添加了一个默认视图

REDIRECT_URL( 'another_view')

您链接的代码段通过确保您无法重定向到另一台主机上的恶意攻击者页面,基本上可以做到相同但更安全.

  • `request.referrer`是我需要的简单的后退按钮/链接,谢谢! (9认同)