Django не может импортировать логин из django.contrib.auth.views

Я пытаюсь создать функцию входа в систему для моей страницы. Чтобы отредактировать urls.py следующим образом, он продолжает печатать это:

не может импортировать имя "логин" из "django.contrib.auth.views"

Как я мог справиться с проблемой?

from django.contrib.auth.views import login
from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
    path("login/", login, {"template_name": "users/login.html"}, 
name="login"),
]

Ответ 1

Начиная с , представления на основе функций login, logout и т.д. Были переписаны в представлениях классов: LoginView [Django-doc] и LogoutView [Django-doc], как указано в примечаниях к выпуску. "Старые" функциональные представления все еще могут использоваться, но были отмечены как устаревшие.

В старые функции на основе функций были удалены, как указано в примечаниях к выпуску.

Вы можете написать это как:

from django.contrib.auth.views import LoginView

from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
  path('login/', LoginView.as_view(template_name='users/login.html'), name="login"),
]

Ответ 2

@Виллем Ван Онсем мне помог. На заметке о реализации, если вы предпочитаете хранить код представления отдельно от URL-адресов (также если у вас есть некоторая обработка), вы должны записать свой urls.py следующим образом (на основе файла urls.py для приложения в папке приложения). Это означает, что вы должны включить его в общие urlpatterns файла проекта urls.py который находится в той же папке, что и ваш файл settings.py, с синтаксическим path('', include('users.urls')),):

    from django.urls import path

    from .views import (
        login_view
    )

    app_name = "userNamespace"
    urlpatterns = [
      path('login/', loginView.as_view(), name="login-view"),
    ]

и в вашем файле views.py вы получите что-то вроде этого:

from django.shortcuts import render
from django.contrib.auth.views import (
    LoginView,
)
from users.models import User

class login_view(LoginView):
    # The line below overrides the default template path of <appname>/<modelname>_login.html
    template_name = 'accounts/login.html' # Where accounts/login.html is the path under the templates folder as defined in your settings.py file

Ответ 3

попробуйте это

app_name = 'users'

urlpatterns = [
    url(r'^login/$', LoginView.as_view(template_name='users/login.html'), name='login'),
]