我正在尝试使用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装饰器执行其通常的行为?
谢谢,
答案 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
文件中添加以上两行。