成功登录后的 Django 重定向
Posted
技术标签:
【中文标题】成功登录后的 Django 重定向【英文标题】:Django Redirect after Successful Login 【发布时间】:2015-05-18 21:54:46 【问题描述】:我有一个要求,每当我登录或尝试请求具有 login_decorator 的视图时,下一页是我需要要求用户选择业务实体的页面(与请求的原始视图无关)。
假设页面是http://127.0.0.1:8999/APP/business_unit
为了实现这一点,我在我的 settings.py 中配置了以下内容
LOGIN_REDIRECT_URL='/APP/business_unit_selector'
现在当我尝试访问http://127.0.0.1:8999/APP/range_list
页面转到http://127.0.0.1:8999/APP/login?next=/APP/range_list
我期待登录后的下一页是/APP/business_unit
但是,下一页是/APP/range_list
浏览器地址栏有http://127.0.0.1:8999/APP/login?next=/APP/range_list
是否有可能实现我在 Django 中尝试的目标?
【问题讨论】:
***.com/questions/4870619/… 【参考方案1】:LOGIN_REDIRECT_URL
仅在未指定 next
时使用。在您的测试请求中有next=/APP/range_list
- 该地址用于在登录后重定向用户。
可能最简单和最有效的解决方案是制作自己的装饰器,类似于login_required
,如果未选择单位,则重定向到/APP/business_unit_selector&next=<redirect_url>
,并将其与login_required
一起应用。就重定向数量而言,它不是最有效的解决方案,但相当干净,并且不会弄乱登录页面。
如果您想实现自然流动,您还必须在 business_unit_selector
视图中处理 next
参数。
你的装饰器应该是这样的
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
from django.utils.http import urlquote
import functools
def business_unit_required(view):
@login_required # probably you want to incorporate it here
@functools.wraps(view)
def wrapped(request, *args, **kwargs):
if not 'selected_business_unit' in request.session:
return redirect('%s?next=%s' % (
reverse('business_unit_selector'),
urlquote(request.get_full_path())))
return view(request, *args, **kwargs)
return wrapped
【讨论】:
【参考方案2】:http://127.0.0.1:8999/APP/login?next=/APP/range_list
在登录后将您重定向到range_list
的原因是,使用next=
,您将覆盖设置文件中指定的内容LOGIN_REDIRECT_URL='/APP/business_unit_selector'
。
如果我理解正确,您需要用户在登录后选择业务实体。
想到的几个解决方案如下:
1.) 不要为登录和业务实体使用单独的表单。而是将它们组合起来。
Username
Password
Business Entity
2.) 如果用户没有业务实体 ResponseRedirect("/APP/business_unit_selector"),您还可以在视图中指定 docs here
【讨论】:
感谢您的回复。更正了帖子。当我尝试访问127.0.0.1:8999/APP/range_list 页面转到127.0.0.1:8999/APP/login?next=/APP/range_list 我期待登录后的下一页是/APP/business_unit 你能发布你的视图函数的代码吗?我在想,如果我看到那部分代码,我可以更好地理解发生了什么。以上是关于成功登录后的 Django 重定向的主要内容,如果未能解决你的问题,请参考以下文章