为啥Django在使用@login_required装饰器时有太多的登录重定向?

Posted

技术标签:

【中文标题】为啥Django在使用@login_required装饰器时有太多的登录重定向?【英文标题】:Why do Django have too many login redirects when using @login_required decorator?为什么Django在使用@login_required装饰器时有太多的登录重定向? 【发布时间】:2017-10-21 02:43:44 【问题描述】:

我已经为这个问题搜索了类似的问题和答案。我希望在 django-allauth 视图进行身份验证后显示主页。但是为什么在使用 @login_required 装饰器时我的登录重定向太多了?”你能请解释一下重定向循环的原因和解决方法?重定向循环的代码是HTTP/1.1'' 302。

我从 Django 文档中查找

@login_required 装饰器执行以下操作:

如果用户没有登录,重定向到/accounts/login/,通过 查询字符串中的当前绝对 URL 为 next,对于 例如:/accounts/login/?next=/polls/3/。 如果用户已登录,则正常执行视图。风景 然后代码可以假设用户已登录。

我希望经过身份验证的用户继续访问主页,同时将未登录的用户重定向到帐户/登录页面。

我的部分 settings.py :

LOGIN_URL='/accounts/login/'
LOGIN_REDIRECT_URL='/'

我的views.py:

from django.shortcuts import render
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
# Create your views here.
@login_required
def home(request):
    context=
    template='home.html'
    return render(request, template,context)

我的 urls.py :

from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url, include
from django.contrib import admin   
from profiles import views as profiles_views

urlpatterns=[
url(r'^admin/',admin.site.urls),
url(r'$',profiles_views.home,name='home'),
url(r'^accounts/',include('allauth.urls')),

【问题讨论】:

【参考方案1】:

问题出在您的 urls.py 中。

你没有放 "^",它标志着行的开始。

试试,

urlpatterns=[
    url(r'^admin/',admin.site.urls),
    url(r'^$',profiles_views.home,name='home'),
    url(r'^accounts/',include('allauth.urls')),
]

【讨论】:

以上是关于为啥Django在使用@login_required装饰器时有太多的登录重定向?的主要内容,如果未能解决你的问题,请参考以下文章

Django:使用@login_required 在视图上测试失败

Django @login_required 删除 https

使用Django自带的登录访问限制login_required

是否可以使用 login_required 在 django url 中装饰 include(...)?

Django中 @login_required用法简介

Django:使用@login_required和设置LOGIN_URL时的信息泄露问题