2

J'ai créé deux types d'utilisateurs différents - camion & société. Voici ma page d'inscription pour un utilisateur enter image description hereComment authentifier un utilisateur

Après l'enregistrement, les données indiquant si l'utilisateur est un camion ou une entreprise iront à la base de données.

Dans ma page de connexion, LoginPage

seulement E-mail et mot de passe sont à saisir. Dans mon formulaire de création d'utilisateur personnalisé, j'ai ajouté le champ nom d'utilisateur = email.

Lorsque j'essaie de me connecter avec des informations d'identification valides, la page ne me redirige pas vers une page particulière en fonction du type d'utilisateur. Au lieu de cela, une erreur que j'ai créée pour les informations d'identification non valides dans le fichier login.html est: "Votre adresse e-mail et votre mot de passe ne correspondent pas. Veuillez réessayer."

voici mon code:

views.py:

def login_view(request): 
title = "Login" 

if request.method == 'POST': 

    form = LoginForm(data=request.POST) 
    email = request.POST.get('email', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=email, password=password) 
    if form.is_valid(): 
     auth.login(request, user) 
     user_type = form.cleaned_data['Label'] 
     if user.is_active & user_type == 'Truck': 
      return HttpResponseRedirect('/post_load/') 
     elif user_type == 'Company': 
      return HttpResponseRedirect('/live_deal/') 
else: 
    form = LoginForm() 

return render(request, 'registration/login.html', {'form' : form, 'title': title}) 

urls.py:

# url(r'^login/$', views.login_view), 
# url(r'^accounts/login/$', views.login_view), 
url(r'^login/$', 'django.contrib.auth.views.login', {'authentication_form': LoginForm}), 
url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'authentication_form': LoginForm}), 

forms.py:

class LoginForm(auth.forms.AuthenticationForm): 

email = forms.EmailField(label=_("Email"),widget=forms.EmailInput) 
CHOICES= (('Truck', 'Truck'),('Company', 'Company'),) 
Label = forms.ChoiceField(choices=CHOICES, label='Label', widget=forms.RadioSelect()) 

login.html:

{%extends "registration/header.html"%} 
{% block content %} 
{% if form.errors %} 
<p>Your email and password didn't match. Please try again.</p> 
{% endif %} 

<form class="form-horizontal" method="post" action = "." >{%csrf_token%} 
<div class="panel panel-default login"> 
     <div class="panel-heading"> 
      <span class="glyphicon glyphicon-lock"></span> Login</div> 
     <div class="panel-body"> 
      <form class="form-horizontal" role="form"> 
      <div class="form-group"> 
       <div class='col-sm-6 col-sm-offset-4'> 
       <table border="0"> 
       <div class="col-sm-4"> 

    <tr><th><label for="id_user" class="col-sm-4 control-label">Email:</label></th><td>{{ form.email }}</td></tr> </div> 
    <div class="col-sm-4"> 



    <tr><th><label for="id_password" class="col-sm-4 control-label">Password:</label></th><td>{{ form.password }}</td></tr> </div> 

</table> </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-sm-offset-4 col-sm-8"> 
        <div class="checkbox"> 
         <label> 
          <input type="checkbox"/> 
          Remember me 
         </label> 
        </div> 
       </div> 
      </div> 
      <div class="form-group last"> 
       <div class="col-sm-offset-4 col-sm-8"> 
        <button type="submit" class="btn btn-success btn-sm"> 
         Sign in</button> 
        <input type="hidden" name="next" value="/" /> 
         <label class="col-sm-offset-3"> 
       <a href="#">Forget Password? </a> 
      </label> 
       </div> 
      </div> 
      </form> 
     </div> 
     <div class="panel-footer"> 
      Not Registered? <a href="/register/">Register</a></div> 

</div> 
</form> 
{% endblock %} 
+0

Il est assez difficile de lire le code python indenté incorrect – acidjunk

+0

Dois-je fournir toute information au sujet de mon code en décrivant brièvement? – vanam

Répondre

0
{% if form.errors %} 
<p>Your email and password didn't match. Please try again.</p> 

Cette erreur est assez large. Vous pourriez faire une boucle pour voir les erreurs réelles.

Mieux encore; n'utilisez pas votre propre système d'authentification, utilisez simplement le système intégré de Django qui vous permet également d'ajouter des champs supplémentaires au modèle utilisateur.

Exemple:

from django.contrib.auth import authenticate, login 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      # Redirect to a success page. 
     else: 
      # Return a 'disabled account' error message 
      ... 
    else: 
     # Return an 'invalid login' error message. 
     ... 

Notez que vous n'avez pas besoin d'écrire votre propre point de vue de connexion, vous pouvez également utiliser le système de connexion de Django pour gérer la forme, passer réinitialisation/changement, urls et modèles (que vous peut remplacer par votre propre modèle):

urls:

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

Alors /login/ sera votre page de connexion. Après avoir travaillé avec le module Django contrib auth, étendez-le avec votre propre formulaire de connexion HTML personnalisé.

django.contrib.auth.views

+0

Merci pour votre aimable réponse. Mais, après la connexion, je voulais rediriger un utilisateur vers une page particulière basée sur le type d'utilisateur. J'ai donc créé un user_type dans mon login_view et j'essayais de le faire. Comment puis-je faire cela dans my_views. – vanam

+0

Lorsque vous utilisez le premier exemple, vous pouvez configurer la redirection car vous avez accès à la variable utilisateur. En utilisant la deuxième approche; vous pouvez le faire avec un signal ou déclencher la redirection à partir de la vue que vous avez configurée comme chez vous. – acidjunk