Django cannot import login from django.contrib.auth.views

Thomas.Q picture Thomas.Q · Aug 18, 2018 · Viewed 26.7k times · Source

I try to build a login function for my page. To edit the urls.py as followed, it keeps printing this:

cannot import name 'login' from 'django.contrib.auth.views'

How could I deal with the problem?

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

Answer

Willem Van Onsem picture Willem Van Onsem · Aug 18, 2018

Since , the login, logout, etc. function-based views have been rewritten to class-based views: the LoginView [Django-doc] and LogoutView [Django-doc] classes, as is specified in the release notes. The "old" function-based views could still be used, but were marked as deprecated.

In , the old function-based views have been removed, as specified in the release notes.

You can write it like:

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