Как войти в систему с помощью таблицы пользовательской модели пользователя в Django 4.1.1?

Я делаю образовательный сайт на Django 4.1.1, и мне нужно, чтобы студенты могли регистрироваться и входить в систему, поэтому я создал таблицу Custom User Model в моем файле models.py.

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import UserManager



class Custom(UserManager):
    def create_user(self, username, email=None, password=None, **extra_fields):
        return self._create_user(username, email, password, **extra_fields)


class Student(AbstractUser):

    objects = Custom()

    sex = models.CharField(max_length=50,default='male')
    is_superuser = None
    is_staff = None  
    groups = None
    user_permissions = None


    class Meta:
        verbose_name = "Student"
        verbose_name_plural = "Students" 


    def __str__(self):
        return self.username

и затем я создал регистрационную форму HTML для получения данных от пользователя

{% load static %}

<html>


<link rel="stylesheet" href="{% static 'css/register.css' %}">
<form  method="post">
    {% csrf_token %}
    
    <input type="text" name="firstName" placeholder="First Name" required minlength="3" maxlength="30">
    <input type="text" name="lastName" placeholder="Last Name" required minlength="3" maxlength="30">
    <input type="text" name="username" placeholder="Username" required minlength="3" maxlength="30">
    <small>{{error}}</small>
    <input type="email" name="email" placeholder="Email" required maxlength="64">
    <small>{{error}}</small>
    <input type="password" name="password" placeholder="Password" required minlength="8" maxlength="32">
    <input type="password" name="passwordAgain" placeholder="Confirm Password" required minlength="8" maxlength="32">
    <small>{{paswword_error}}</small>
    <input type="radio" name="sex" value="male" checked>Male</input>
    <input type="radio" name="sex" value="female">Female</input>
    
    <button type="submit">Submit</button>

</form>
<script src="{% static 'js/register.js' %}"></script>
</html>

и затем я настроил мой views.py файл для получения данных и хранения их в базе данных, все работало хорошо до сих пор .

вот мой view.py файл :

from django.shortcuts import render,redirect
from django.http import HttpResponse
from .models import Student
from django.contrib.auth import authenticate,login,logout

# Create your views here.


def home(request):
    # return HttpResponse('This is The Home Page !')
    return render(request, 'home/index.html')






def register(request):
    if request.method == 'POST':

        firstName = request.POST['firstName']
        lastName = request.POST['lastName']
        username = request.POST['username']
        email = request.POST['email']
        password = request.POST['password']
        passwordAgain = request.POST['passwordAgain']
        sex = request.POST['sex']
        

        if Student.objects.filter(username=username).exists() or Student.objects.filter(email=email).exists() or password != passwordAgain:
            error = "Alrady Taken"
            paswword_error = "Paswwords Don't Match"
            return render(request,'register/register.html',{'error':error,'paswword_error':paswword_error})
        else:

            user = Student.objects.create_user(username,email,password)
            user.first_name = firstName
            user.last_name = lastName
            user.sex = sex
            user.save()
            return redirect('login')        


        

    
    return render(request,'register/register.html')





def login(request):

    if request.method == 'Post':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request,username=username,password=password)
        if user is not None:
            login(request,user)
            return redirect('home')
        else:
            return HttpResponse('error')

    return render(request, 'login/login.html')

проблема в том, что функциональность Login не работает, она вообще не работает, она не возвращает ничего, ни успех, ни ошибки!

Итак, как я могу настроить функцию входа в систему, которая сравнивает данные, полученные от пользователя, с данными в базе данных, и регистрирует пользователя на основе правильного соответствия?

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