Проблема с регистрацией пользователя на веб-странице 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')

Этот подход вы могли бы использовать.

Вернуться на верх