Проблема с регистрацией пользователя на веб-странице django
У меня проблемы с созданием страницы входа в систему в django. Я закончил с представлениями, html и прочим, но проблема в том, что когда я нажимаю кнопку login, пользователь не входит в систему. После некоторой отладки я увидел, что проблема в том, что значение пользователя - None, но я не знаю почему
Если кто-то может помочь мне с этим, было бы здорово
я размещаю код ниже:
просмотров:-
from django.shortcuts import render, redirect
from .forms import RegisterForm, ProfileForm
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
def loginUser(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
try:
user = User.objects.get(email=email)
except:
print("User does not exist!")
user = authenticate(request, email=email, password=password)
if user is None:
login(request, user)
return redirect('home')
else:
print('The email or password is incorrect')
html:-
<div>
<div class="login-container">
<div class="header-container">
<h1 class="header-text heading"><span>login</span></h1>
</div>
<div class="login-container1">
<div class="login-container2">
<span class="login-text biggerSubHeading">welcome</span>
<form method="POST">
{% csrf_token %}
<div class="login-container3">
<div class="label-container">
<label class="label"><span>Email</span></label>
</div>
<input type="text" name="email" placeholder="placeholder" class="login-textinput input" />
</div>
<div class="login-container4">
<div class="label-container">
<label class="label"><span>Password</span></label>
</div>
<div class="password-field-container">
<div class="password-field-container1">
<input type="password" name="password" placeholder="placeholder" class="password-field-textinput input" id="lPassword" />
</div>
<div class="password-field-container2">
<input type="checkbox" onclick="reveal3()" id="check3" class="password-field-checkbox" />
<span class="password-field-text">
<span>Show password</span>
</span>
</div>
</div>
</div>
<div class="login-container5">
<input type="submit" value="login" class="login-button imp button">
</div>
</form>
</div>
<div class="login-container6">
<a
href=""
target="_blank"
rel="noreferrer noopener"
class="login-link imp"
>
Forgot password
</a>
<a href="{% url 'register' %}" class="login-navlink imp">
I don't have an account
</a>
</div>
</div>
</div>
сигналы:-
import email
from django.db.models.signals import post_save, post_delete
from .models import UserInfo
from django.dispatch import receiver
from django.contrib.auth.models import User
def userUpdate(sender, instance, created, **kwargs):
if created:
user = instance
profile = UserInfo.objects.create(
user=user,
email=user.email,
first_name=user.username,
last_name=user.last_name,
)
def userDelete(sender, instance, **kwargs):
user = instance.user
user.delete()
post_save.connect(userUpdate, sender=User)
post_delete.connect(userDelete, sender=UserInfo)
модели:-
from django.db import models
from django.contrib.auth.models import User
import uuid
class UserInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
email = models.EmailField(max_length=200)
password = models.CharField(max_length=200)
confirm_password = models.CharField(max_length=200)
profile_photo = models.ImageField(null=True, blank=True, upload_to='profile_photo/',
default='profile_photo/default.jpg')
phone_number = models.CharField(max_length=10)
address = models.TextField(null=True)
pin_code = models.CharField(null=True, max_length=6)
region = models.CharField(null=True, max_length=200)
state = models.CharField(null=True, max_length=100)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True,
editable=False)
def __str__(self):
name = self.first_name + ' ' + self.last_name
return str(name)
Ну вот и все, и я думаю, что это, возможно, было немного много, но не важно. Пожалуйста, кто-нибудь, если бы вы помогли мне с этим, это была бы большая помощь
О, верно, и вывод таков:- Электронная почта или пароль неверны (Текущий вывод)
Согласно doc, метод authenticate
не принимает запрос, и это является основной причиной возврата значения None
. Кроме того, я бы предложил использовать username
в параметре также вместо email
, поскольку вы используете django
User
model
.
authenticate(username='john', password='secret')
Кроме того, возможно, вы захотите подправить имеющийся код, чтобы как бы облегчить использование username
. Например, внутри блока if request.method == 'POST':
:
email = request.POST['email']
password = request.POST['password']
# You can import from django.shortcuts import get_object_or_404
# and from django.contrib.auth import ..., get_user_model
# Try retrieving the user object from the get_user_model method
user = get_object_or_404(get_user_model(), email=Email) # Assuming the email field is unique.
found = False
if user:
# If the user exists, then check his/her password
if user.check_password(Senha): # If the passwords matched
found = True
else:
print("Incorrect password!")
else:
print("User does not exist!")
if found: # If the password matched then log in the user
user = authenticate(username=user.username, password=password)
if user: # or if user is not None
login(request, user)
return redirect('home')
else:
print('The email or password is incorrect')
Этот подход вы могли бы использовать.