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

痴心易碎 提交于 2019-11-27 02:50:25

问题


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

回答1:


Since django-1.11, 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 django-2.1, 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"),
]



回答2:


@Willem Van Onsem's answer worked for me. On an implementation note, if you rather keep your view code separate from urls (also if you have some processing to do), you would write your urls.py like this (based on a per-app urls.py file in your app folder which means you have to include it in the overall urlpatterns of the project's urls.py file which is in the same folder as your settings.py file, with the syntax 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"),
    ]

and over in your views.py file you would have something like this:

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:


try this

app_name = 'users'

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


来源:https://stackoverflow.com/questions/51906428/django-cannot-import-login-from-django-contrib-auth-views

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!