1

任务很简单:

If user visits site root then:
    if user is authenticated then:
        redirect to /dashboard/
    else:
        redirect to settings.LOGIN_URL

有很多方法可以实现它,但我想知道是否有这种方法我需要使用urls.py。

我找到了 RedirectView 的解决方案login_required(RedirectView.as_view(url=my_url)),但是我只能编写静态 my_url 而不是 reverse(),这不灵活。

4

2 回答 2

1

您可以reverse_lazy在 url 配置中使用 (Django 1.4),如下所示:

from django.conf.urls.defaults import url, patterns
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect

urlpatterns = patterns('',
    url(r'^/$', lambda request: return redirect(reverse_lazy('url_name')),
)

另一种可能性是定义LOGIN_URLusing reverse_lazy,因此您可以继续settings.LOGIN_URL在重定向中使用。

代码未经测试,可能某处有错字。

于 2012-11-10T19:47:43.870 回答
1

您只需要将 LoginRequired 混合到您的视图中。您可以在此处找到 mixin 的示例:

http://djangosnippets.org/snippets/2442/

然后在定义该视图的地方,您只需执行以下操作:

class RedirectView(LoginRequiredMixin, DetailView):
    ....

或者你继承的任何基于类的视图。希望有帮助!

于 2012-11-10T20:24:32.437 回答