Как войти в систему с помощью таблицы пользовательской модели пользователя в 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 не работает, она вообще не работает, она не возвращает ничего, ни успех, ни ошибки!
Итак, как я могу настроить функцию входа в систему, которая сравнивает данные, полученные от пользователя, с данными в базе данных, и регистрирует пользователя на основе правильного соответствия?