1

所以我将flask 0.9与python 2.7一起使用。为了在不真正理解我在做什么的情况下偷偷摸摸,我搞砸了我的 url 路由。

我正在使用 flask-admin 来创建一个快速界面。这是我所做的:

from flask.ext.admin import AdminIndexView
from werkzeug.routing import RequestRedirect

class IndexView(AdminIndexView):
def is_accessible(self):
    if current_user.is_authenticated and current_user.has_role('admin'):
        return True
    else:
        raise RequestRedirect('index')

我的意图是让它像烧瓶视图中的 return redirect('index') 一样工作,可惜它没有按计划工作。它只是让它在第一次触发后 /admin 总是路由到 /index 。

所以现在,在删除代码并将 raise 语句更改为返回 False 之后,我的应用程序仍在将 /admin 重定向到 /index(即使在不同的虚拟环境中创建了完全不同的应用程序).​​.

任何帮助是极大的赞赏!

4

1 回答 1

4

看起来您的重定向已被浏览器缓存。见这里: http: //getluky.net/2010/12/14/301-redirects-cannot-be-undon/

不幸的是,RequestRedirect() 异常返回 301 HTTP 状态码,它会被浏览器缓存。

有一种方法可以做得更好:

  1. is_accessible用于验证用户是否可以看到某些管理视图。如果您有多个视图,将为每个视图调用它,然后只显示可见的菜单项
  2. _handle_view可以覆盖的方法。您可以在此处查看默认实现:https ://github.com/mrjoes/flask-admin/blob/master/flask_admin/base.py#L269

随意使用 302 状态代码返回正确的重定向,而不是执行 abort(404)。

于 2013-05-04T07:31:59.393 回答