0

J'essaie de passer un formulaire d'authentification personnalisé que j'ai créé pour le auth.views.login.Comment passer un formulaire d'authentification personnalisé depuis une vue dans django?

Tous les tutoriels que j'ai trouvé le font par url() dans urls.py, et avec une URL pour la vue de connexion, par exemple:

url(r'^login/$', auth.views.login,{'authentication_form':MyAuthenticationForm}) 

Mais je veux l'URL pour être le même que l'url de l'index, si l'utilisateur est authentifié puis affichez l'index sinon affichez le formulaire de connexion avec mon formulaire d'authentification personnalisé.

Voici mon views.py:

from django.shortcuts import render 
from django.contrib.auth import views as auth_views 


def cp(request): 
    if request.user.is_authenticated(): 
     return render(request, 'index.html') 

    # How to pass my custom authentication form ? 
    return auth_views.login(request) 

Cela fonctionne, mais comment puis-je dire django mon formulaire d'authentification personnalisé?

Répondre

2

Je vous recommande de conserver /login/ comme URL de connexion, mais utilisez le décorateur login_required pour votre vue d'index. Lorsqu'un nouveau utilisateur visite l'URL de votre index, ils seront redirigés vers votre page de connexion, puis retour à l'url d'index une fois qu'ils se sont connectés.

from django.contrib.auth.decorators import login_required 

@login_required 
def index(request): 
    return render(request, 'index.html') 

Cette approche est très typique de Django, et est plus simple que gérer la connexion avec l'URL de l'index. Si vous voulez vraiment appeler la vue de connexion à partir de la page d'index, vous devez utiliser le même kwarg authentication_form que vous avez dans votre modèle url:

return auth_views.login(request, authentication_form=MyAuthenticationForm) 
+0

Merci, qui a travaillé. Je suis nouveau sur django, mais je remarque que parfois, lorsque je fais des changements, il ne s'applique pas même si je redémarre le serveur. –

+0

Cela ressemble à un problème distinct, donc je ne peux pas aider avec ça. – Alasdair

+0

Vous n'en avez pas besoin. Je dis ça comme ça :) –