如何解决自定义身份验证在Django中的自定义用户模式中不起作用
我创建了由用户名和密码组成的自定义用户模型,并使用通过用户名和密码登录,但是当我尝试登录时登录名不起作用时,我还创建了自定义身份验证 backend.py 用于 models.py
中的自定义用户模型 HandleLoginregister_app / model.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser,BaseUserManager
# Create your models here.
class Register(models.Model):
class Meta:
db_table = "register"
id = models.AutoField(primary_key = True)
first_name=models.CharField(max_length=20)
last_name=models.CharField(max_length=20)
email=models.EmailField()
class HandleloginManager(BaseUserManager):
def create_user(self,username,password=None):
if not username:
raise ValueError("username is required")
user = self.model(
username = username,)
user.set_password(password)
user.save(using=self._db)
return user
class Handlelogin(AbstractBaseUser):
class Meta:
db_table = "login"
username = models.CharField(max_length=150,unique = True)
password = models.CharField(max_length = 50)
register = models.OnetoOneField(Register,on_delete=models.CASCADE)
USERNAME_FIELD="username"
REQUIRES_FIELD=['password']
objects = HandleloginManager()
register_app / views.py
from django.shortcuts import redirect,render,HttpResponse
from .models import Register,Handlelogin
from django.contrib.auth import authenticate,login
# Create your views here.
def home(request):
return render(request,'home.html')
def register(request):
if request.method == 'POST':
add = Register()
add.first_name= request.POST['firstname']
add.last_name= request.POST['lastname']
add.email= request.POST['email']
add.save()
d = Handlelogin.objects.create_user(
username=request.POST['username'],password=request.POST['password']
)
d.register = add
d.save()
return redirect('/')
else:
return render(request,'register.html')
def users(request):
reg = Register.objects.all()
return render(request,'users.html',{'reg':reg})
def login_handle(request):
if request.POST:
username = request.POST['user']
password = request.POST['pass']
user = authenticate(username = username,password = password)
if user is not None:
login(request,user)
return HttpResponse("Login Succesfully")
else:
return HttpResponse("Invalid login")
return render(request,'login.html')
register_app / backend.py
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.hashers import check_password
from register_app.models import Handlelogin
class CustomBackend(ModelBackend):
def authenticate(self,request,password=None):
try:
user = Handlelogin.objects.get(username = username)
if user.check_password(password):
return user
except Handlelogin.DoesNotExist:
return None
def get_user(self,user_id):
try:
return Handlelogin.objects.get(pk=user_id)
except Handlelogin.DoesNotExist:
return None
我使用HTML表单而不是Django表单,并且添加了自定义用户模型 AUTH_USER_MODEL =“ register_app.Handlelogin” 和自定义后端注册的 AUTHENTICATION_BACKENDS =('register_app.backends。 set.py文件中的“ CustomBackend”,)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。