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
Начиная с django-1.11, представления на основе функций login
, logout
и т.д. Были переписаны в представлениях классов: LoginView
[Django-doc] и LogoutView
[Django-doc], как указано в примечаниях к выпуску. "Старые" функциональные представления все еще могут использоваться, но были отмечены как устаревшие.
В django-2.1 старые функции на основе функций были удалены, как указано в примечаниях к выпуску.
Вы можете написать это как:
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'),
]