让Django的@login_required装饰器工作还需要做些什么?

时间:2013-12-09 20:33:43

标签: python django django-authentication

我正在尝试使用Django的帐户系统,包括@login_required装饰器。我的settings.py文件包含django.contrib.auth,我已经完成了syncdb。

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8000/accounts/login/?next=/
Using the URLconf defined in dashboard.urls, Django tried these URL patterns, in this order:
^$ [name='home']
The current URL, accounts/login/, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

在尝试@ login_required-装饰我的家庭视图后,我看到了上述内容。

它似乎很窒息,因为它被重定向到accounts / login /,我在urls.py中没有准备好。

我可以将哪些内容添加到urls.py或其他地方,以便login_required装饰器执行其通常的行为?

谢谢,

3 个答案:

答案 0 :(得分:18)

在您的设置中设置LOGIN_URL。默认值为'/accounts/login/'

装饰器还采用可选的login_url参数:

@login_required(login_url='/accounts/login/')

而且,来自docs

  

请注意,如果您未指定login_url参数,则需要执行此操作   确保settings.LOGIN_URL和您的登录视图正确   相关。例如,使用默认值,将以下行添加到   你的URLconf:

(r'^accounts/login/$', 'django.contrib.auth.views.login'),

答案 1 :(得分:0)

在Django 2.2.1中对我有用的东西-在项目urls.py中包含re_path('^accounts/', admin.site.urls),

urls.py

from django.conf import settings
from django.conf.urls import include
from django.conf.urls import re_path
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^accounts/', admin.site.urls),
]

在我的观点中。py:

views.py

from django.contrib.auth.decorators import login_required
from django.views.generic import TemplateView

@method_decorator(login_required, name='dispatch')
class HomePageView(TemplateView):
    """
    Home Page View
    """
    template_name = 'amp/home.html'

希望有帮助。

更新:为避免django关于两次加载管理url的警告,我在urls.py中使用了重定向:

urls.py

urlpatterns = [
    re_path('^accounts/', admin.site.urls),
    re_path(r'^admin/', RedirectView.as_view(url='/accounts/', permanent=True))
]

答案 2 :(得分:0)

path('accounts/login/', admin.site.urls),

将此行添加到您的urls.py项目文件夹中。这样就可以了。

from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')

views.py文件中添加以上两行。