web-dev-qa-db-fra.com

Django ne peut pas importer de connexion depuis Django.contrib.auth.views

J'essaie de créer une fonction de connexion pour ma page. Pour modifier le fichier urls.py comme suit, il continue d'imprimer ceci:

impossible d'importer le nom 'login' de 'Django.contrib.auth.views'

Comment pourrais-je régler le problème?

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"),
]
16
Thomas.Q

Depuis Django-1.11 , les vues basées sur la fonction login, logout, etc. ont été réécrites en vues basées sur la classe: les (LoginView [Django-doc] et LogoutView [Django-doc] classes, comme spécifié dans les notes de version . Les "anciennes" vues basées sur les fonctions pouvaient toujours être utilisées, mais étaient marquées comme obsolète.

Dans Django-2.1 , les anciennes vues basées sur les fonctions ont été supprimées, comme spécifié dans les notes de version .

Vous pouvez l'écrire comme:

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"),
]
37
Willem Van Onsem

La réponse de @Willem Van Onsem a fonctionné pour moi. Sur une note d'implémentation, si vous préférez garder votre code d'affichage séparé des URL (également si vous avez un traitement à faire), vous écririez votre urls.py Comme ceci (basé sur une application par application urls.py dans votre dossier d'application, ce qui signifie que vous devez l'inclure dans le urlpatterns global du fichier urls.py du projet qui se trouve dans le même dossier que votre fichier settings.py, avec le syntaxe 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"),
    ]

et plus dans votre fichier views.py vous auriez quelque chose comme ceci:

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
1
J-a-n-u-s

essaye ça

app_name = 'users'

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