Django si l'utilisateur.is_authenticated ne fonctionne pas
Je suis juste essayer de faire fonctionner un simple {% if user.is_authenticated %}
. Mais il y a toujours le retour False
.
Voici mes tous les fichiers.
views.py
from django.shortcuts import render_to_response, redirect
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.contrib.auth.hashers import *
from forms import UserLoginForm
from models import UserLogin
def index(request):
return render_to_response('index.html', context_instance = RequestContext(request))
def login(request):
if request.method == 'POST':
form = UserLoginForm(request.POST or None)
if form.is_valid():
email_from_form = form.cleaned_data['email']
password_from_form = form.cleaned_data['password']
users = User.objects.filter(email = email_from_form)
for j in users:
if j.email == email_from_form:
pass_match = check_password(password_from_form, j.password)
if pass_match:
return redirect(reverse('profile'), context_instance = RequestContext(request))
else:
return HttpResponse('Entered password did not match')
else:
return HttpResponse('Entered email does not exist')
else:
return HttpResponse(form.errors)
else:
form = UserLoginForm()
return render_to_response('login.html', {'form':form}, context_instance = RequestContext(request))
def profile(request):
return render_to_response('profile.html', context_instance = RequestContext(request))
forms.py
from django import forms
class UserLoginForm(forms.Form):
email = forms.EmailField(max_length = 100)
password = forms.CharField(max_length = 100)
models.py
from django.db import models
class UserLogin(models.Model):
email = models.EmailField(max_length = 100)
password = models.CharField(max_length = 100)
def __unicode__(self):
return self.email
profile.html
<html>
<head>
<title>profile</title>
</head>
<body>
{% if user.is_authenticated %}
Welcome user, you are loged in..
{% else %}
You are not logged in
{% endif %}
</body>
</html>
login.html
<html>
<head>
<title>login</title>
</head>
<body>
<form action="{% url login %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" id="submit" name="submit" value="Login" />
</form>
</body>
</html>
Il revient toujours You are not logged in
Je suis nouveau sur django et je ne comprends pas ce pourquoi il est comme ça.
Notez que
user.is_authenticated
est une méthode, et non une propriété. Par conséquent, vous devez vérifier que: user.is_authenticated()
docs.djangoproject.com/en/1.9/ref/contrib/auth/...
OriginalL'auteur Amit Yadav | 2012-10-30
Vous devez vous connecter pour publier un commentaire.
Vous ne vous connectez jamais à votre utilisateur. Essayez quelque chose le long des lignes suivantes:
Mis à jour pour utiliser votre formulaire pour plus de clarté; la vérification des erreurs exclus.
username
pour authentifier?, pasemailid
?Vous pouvez utiliser l'adresse e-mail comme nom d'utilisateur
Notez que par défaut, la longueur du nom d'utilisateur est de 30 caractères, ce qui dans certains cas peut être trop court pour les adresses e-mail. Je vous recommande de regarder dans un personnalisé backend au lieu de cela: djangosnippets.org/snippets/74. Vérifiez également les commentaires car vous pourriez avoir à étendre manuellement la longueur de champ pour le champ nom d'utilisateur si vous souhaitez l'utiliser pour stocker des adresses e-mail
OriginalL'auteur jro