任务很简单:
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(),这不灵活。
答案 0 :(得分:1)
您可以在url配置中使用reverse_lazy
(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_URL
定义reverse_lazy
,因此您可以继续在重定向中使用settings.LOGIN_URL
。
代码未经测试,某处可能有拼写错误。
答案 1 :(得分:1)
您只需将LoginRequired混合到您的视图中即可。你可以在这里找到一个mixin的例子:
http://djangosnippets.org/snippets/2442/
然后在那里定义该视图,你只需:
class RedirectView(LoginRequiredMixin, DetailView):
....
或者您继承的任何基于类的视图。希望有所帮助!