Django 1.11.3 有关LOGIN_REDIRECT_URL的文档说:
登录后将请求重定向到的URL contrib.auth.login视图没有下一个参数。
我的setting.py中有LOGIN_REDIRECT_URL =“ some_url”
登录时,我在请求url中看到“ next =“(没有值,只有键),因此我怀疑这使Django忽略了LOGIN_REDIRECT_URL,最终进入了Admin默认页面。
我使用默认的登录Django功能,没有自定义模板或其他任何东西。登录(完全没有密钥)以查看是否会(希望)实际使用LOGIN_REDIRECT_URL时,如何摆脱请求中的“ next=
”?
答案 0 :(得分:0)
如果您的settings.py中包含LOGIN_REDIRECT_URL,则如果您不给url提供任何下一个参数,它将使用LOGIN_REDIRECT_URL中提到的默认URL。
如果LOGIN_REDIRECT_URL ='some / path /'
https://yourdomain.com/login/ 将重定向到“ some / path /”
https://yourdomain.com/login/?next=/override/default/path 将重定向到“覆盖/默认/路径”
答案 1 :(得分:0)
这是预期的行为。通常,您希望用户请求任何需要登录的视图(使用@login_required
装饰器)在登录后重定向到同一视图。已记录here
由于您的查看网址为空(主网址),因此您得到next=
。从用户角度来看,首页上要求登录是非常罕见的,这意味着您看不到要注册的内容。
如果您删除视图的@login_required
装饰器,而只在首页上添加一个登录按钮(转到常规LoginView
),它将没有next
参数,并且您的用户将被重定向到LOGIN_REDIRECT_URL
。
现在,如果真的希望用户必须登录您的主页并重定向到LOGIN_REDIRECT_URL
,则有两个选择:
删除@login_required
装饰器,然后在您的视图中进行检查和重定向:
from django.conf import settings
def homepage(request):
if not request.user.is_authenticated:
return redirect(settings.LOGIN_URL)
# rest of view code
如果您使用的是基于类的视图,请在视图中使用LoginRequiredMixin
并自己处理handle_no_permission()
:
from django.contrib.auth.views import redirect_to_login
from django.contrib.auth.mixins import LoginRequiredMixin
class Home(LoginRequiredMixin, View):
def get(self):
# your view code
def handle_no_permission(self):
# pass None to redirect_field_name in order to remove the next param
return redirect_to_login(self.request.get_full_path(), self.get_login_url(), None)