web-dev-qa-db-fra.com

Existe-t-il un modèle de connexion intégré dans Django?

Je souhaite autoriser un utilisateur à se connecter avant de voir les pages. Existe-t-il un modèle intégré pour la connexion des utilisateurs, de sorte que je n'ai pas à écrire ma propre page de connexion?

56
stanleyxu2005

Oui. Vous pouvez tout lire ici: https://docs.djangoproject.com/en/1.8/topics/auth/default/#Django.contrib.auth.decorators.login_required ... mais ici sont quelques puces:

  • ajoutez 'Django.contrib.auth.middleware.AuthenticationMiddleware' à MIDDLEWARE_CLASSES dans settings.py
  • ajouter 'Django.contrib.auth 'et 'Django.contrib.contenttypes' à INSTALLED_APPS dans settings.py
  • configurez une URL pour la connexion en utilisant Django.contrib.auth.views.login pour la vue, comme url(r'^login/$', 'Django.contrib.auth.views.login',name="my_login")
  • Dans votre vue, incluez le décorateur login_required et ajoutez-le avant votre vue. Par exemple...

views.py ...

from Django.contrib.auth.decorators import login_required

@login_required
def home(request):
  return HttpResponse('Home Page')

Par défaut, vous placez ensuite le modèle dans my_template_directory/registration/login.html. De plus amples informations sur ce modèle peuvent être trouvées sur le lien au début de cet article.

46
Brant

Comme mentionné dans les commentaires de l'auteur, la façon la plus simple de procéder consiste à ajouter les lignes suivantes à urls.py:

from Django.contrib.auth.views import login, logout

urlpatterns = patterns('',
    url(r'^accounts/login/$', login, {'template_name': 'admin/login.html'}),
    url(r'^accounts/logout/$', logout),
)

Pour autant que je sache, l'ajout de r'^accounts/$' et r'^accounts/profile/$' Les URL ne sont pas nécessaires sauf si la gestion du profil utilisateur est requise.

Comme suggéré par @mmatt dans les commentaires, définissez LOGIN_REDIRECT_URL = '/' dans settings.py pour éviter la redirection par défaut vers /accounts/profile/ après la connexion. Voir LOGIN_REDIRECT_URL dans Django documentation des paramètres.

Cela devrait également fonctionner dans Django 2.x en utilisant path au lieu de url de manière appropriée.

32
mrts

Le plus réponse positive par @brant est techniquement incorrect. Django fournit des vues par défaut pour gérer la fonctionnalité de connexion mais selon la documentation ne fournit pas de modèle:

Django ne fournit aucun modèle par défaut pour les vues d'authentification. Vous devez créer vos propres modèles pour les vues que vous souhaitez utiliser. Le contexte du modèle est documenté dans chaque vue, voir Toutes les vues d'authentification.

14
Jonny Waffles

Si vous souhaitez prendre un itinéraire rapide pour être opérationnel, je vous recommande d'utiliser l'URLConf fourni.

par exemple:

urlpatterns = [
    url('^', include('Django.contrib.auth.urls'))
]

Voir plus de détails dans la documentation Django: https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-Django.contrib.auth. vues

4
Shailesh

Semblable à la réponse de mrts, dans Django plus récent, vous pouvez utiliser LoginView . Vous pouvez personnaliser davantage le modèle en définissant le contexte du modèle comme title, site_title etc. tel qu'utilisé dans admin/base.html afin qu'il ne ressemble pas à une connexion administrateur.

from Django.contrib.auth.views import LoginView

urlpatterns = [
    url(  
        r'^accounts/login/$',  
        LoginView.as_view(
            template_name='admin/login.html',
            extra_context={         
              'title': 'Login',
              'site_title': 'My Site',
              'site_header': 'My Site Login'},
        name='login'),
]
3
Yushin Washio