我正在尝试实现注册和登录功能。
这是我的 views.py
:
此处auth.authenticate
def login(request):
if request.method == 'POST':
f = auth.authenticate(email = request.POST['email'], password = request.POST['password'])
print(f)
if f is not None:
auth.login(request,f)
return redirect('home')
else:
return render(request,'login.html',{'error':'Wrong Username or password'})
else:
return render(request, 'login.html')
它总是返回None
,如果我更改为user并尝试使用用户名和密码登录,则它可以正常工作,但不适用于电子邮件和密码。
即
f = auth.authenticate(username= request.POST['username'], password = request.POST['password'])
我尝试了request.get.POST('email')
但没有用,并且还检查了request.POST['email']
和request.POST['password']
包含有效信息。
答案 0 :(得分:1)
Django默认使用用户名字段进行身份验证。如果要使用其他字段进行身份验证,则应扩展AbstractBaseUser并将电子邮件设置为身份验证字段。
对于settings.py:
AUTH_USER_MODEL = 'appname.User'
在您的模型中。py:
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import BaseUserManager
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email,
password=password,
)
user.admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
email = models.EmailField(max_length=100, unique=True)
#other fields..
objects = MyUserManager()
USERNAME_FIELD = 'email'
中看到另一种方法