Django -- 条件登录重定向
Posted
技术标签:
【中文标题】Django -- 条件登录重定向【英文标题】:Django -- Conditional Login Redirect 【发布时间】:2013-05-25 07:27:08 【问题描述】:我正在开发一个 Django 应用程序,它有两种类型的用户:管理员和用户。两者都是我项目中的组,根据个人登录所属的组,我想将它们重定向到单独的页面。现在我在我的设置中有这个。py
LOGIN_REDIRECT_URL = 'admin_list'
这会将所有登录到“admin_list”的用户重定向到“admin_list”,但该视图只能由 Admins 组的成员访问——否则它会返回 403。至于登录视图本身,我只使用一个 Django提供。我已将此添加到我的主 urls.py 文件中以使用这些视图:
url(r'^accounts/', include('django.contrib.auth.urls')),
如何做到这一点,以便只有 Admins 组的成员被重定向到此视图,而其他所有人都被重定向到不同的视图?
【问题讨论】:
您是使用自己的登录视图还是重用 Django 的通用视图?如果您有自己的观点,请向我们展示该观点。 我正在使用 Django 的通用登录视图,只是在我的主 urls.py 中使用它 url(r'^accounts/', include('django.contrib.auth.urls')), 请用该信息更新问题。如果您不提供调试所需的所有信息,没有人可以帮助您。 【参考方案1】:创建一个单独的视图,根据用户是否在管理员组中重定向用户。
from django.shortcuts import redirect
def login_success(request):
"""
Redirects users based on whether they are in the admins group
"""
if request.user.groups.filter(name="admins").exists():
# user is an admin
return redirect("admin_list")
else:
return redirect("other_view")
将视图添加到您的urls.py
,
url(r'login_success/$', views.login_success, name='login_success')
然后将其用于您的LOGIN_REDIRECT_URL
设置。
LOGIN_REDIRECT_URL = 'login_success'
【讨论】:
我在 myapp/urls.py 中添加了以下内容,效果很好! url(r'login_success/$', views.login_success, name='login_success'),【参考方案2】:我使用中间视图来完成同样的事情:
LOGIN_REDIRECT_URL = "/wherenext/"
然后在我的 urls.py 中:
(r'^wherenext/$', views.where_next),
然后在视图中:
@login_required
def wherenext(request):
"""Simple redirector to figure out where the user goes next."""
if request.user.is_staff:
return HttpResponseRedirect(reverse('admin-home'))
else:
return HttpResponseRedirect(reverse('user-home'))
【讨论】:
以上是关于Django -- 条件登录重定向的主要内容,如果未能解决你的问题,请参考以下文章