Подтвердить что ты не робот

Что еще мне нужно сделать, чтобы Django @login_required decorator работал?

Я пытаюсь использовать систему учетных записей 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-украсить мой домашний вид.

Кажется, он задыхается, потому что перенаправляется на учетные записи /login/, которые я не подготовил для своих urls.py.

Что я могу добавить в urls.py или в другом месте, чтобы декоратор login_required выполнил обычное поведение?

Спасибо,

4b9b3361

Ответ 1

Установите LOGIN_URL в ваших настройках. Значение по умолчанию: '/accounts/login/'

Декоратор также принимает необязательный аргумент login_url:

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

И, из docs:

Обратите внимание: если вы не укажете параметр login_url, вам нужно будет убедитесь, что настройки .LOGIN_URL и ваш вид входа в систему должным образом связано. Например, используя значения по умолчанию, добавьте следующую строку в ваш URLconf:

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

Ответ 2

Что сработало для меня в Django 2.2.1 - re_path('^accounts/', admin.site.urls), в мой проект urls.py:

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),
]

И в моих views.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))
]

Ответ 3

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

Добавьте эту строку в папку проекта urls.py. Тогда все будет хорошо.

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

Добавьте две строчки в файл views.py.