Python Django中的自定义用户模式无法登录
我已经创建了由用户名和密码组成的自定义用户模型,我使用用户名和密码登录,但当我尝试登录时,登录不起作用 注册应用程序/model.pyPython Django中的自定义用户模式无法登录,python,django,django-models,django-views,django-templates,Python,Django,Django Models,Django Views,Django Templates,我已经创建了由用户名和密码组成的自定义用户模型,我使用用户名和密码登录,但当我尝试登录时,登录不起作用 注册应用程序/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:
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 = self.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()
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':
if request.POST.get('firstname') and request.POST.get('lastname') and request.POST.get('username')and request.POST.get('email') and request.POST.get('password'):
add = Register()
add.first_name= request.POST['firstname']
add.last_name= request.POST['lastname']
add.email= request.POST['email']
add.save()
d = Handlelogin()
d.username= request.POST['username']
d.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')
注册应用程序/视图.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 = self.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()
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':
if request.POST.get('firstname') and request.POST.get('lastname') and request.POST.get('username')and request.POST.get('email') and request.POST.get('password'):
add = Register()
add.first_name= request.POST['firstname']
add.last_name= request.POST['lastname']
add.email= request.POST['email']
add.save()
d = Handlelogin()
d.username= request.POST['username']
d.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')
我使用的是HTML表单而不是Django表单,我在setting.py文件中添加了自定义用户模型AUTH\u user\u model=“register\u app.Handlelogin”(
username=request.POST['username'],
password=request.POST['password']
)
d、 寄存器=添加
d、 保存()
.password=…
不会散列密码。实际上,这就是创建create\u user
函数的全部思想。也就是说,请使用表单
。为什么不使用内置的Django用户/auth功能?