Jas*_*der 1 python authentication django nonetype
我阅读了很多关于这个问题的话题,问题总是存在。当我提交登录表单时,身份验证函数()返回 None。我使用函数 set_password() 进行注册,它没有任何改变。
这是我的代码(也在这里):
from django.contrib.auth.models import User
from django.shortcuts import render
from forms import LoginForm, RegistrationForm
from django.contrib import auth
def login(request):
state = 0 # 0 = initialisation / 1 = OK / 2 = BAD_PW
form = LoginForm()
if request.method == 'POST':
error = False
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
email = form.cleaned_data["email"]
password = form.cleaned_data["password"]
user = auth.authenticate(email=email,
password=password)
if user:
auth.login(request, user)
state = 1
else:
state = 2
print "login state " + str(state)
else:
form = LoginForm()
return render(request, "birneo/login.html", locals())
def register(request):
state = 0
form = RegistrationForm()
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = User()
user.username = form.cleaned_data['username']
user.email = form.cleaned_data['email']
user.set_password(form.cleaned_data['password'])
user.save()
state = 1
form = RegistrationForm()
else:
form = RegistrationForm()
return render(request, "birneo/register.html", locals())
Run Code Online (Sandbox Code Playgroud)
您的问题是您尝试根据电子邮件/密码对对用户进行身份验证,并且没有接受此类对的后端。模型后端接受用户名/密码对,因此使用电子邮件进行身份验证:
(...)
if form.is_valid():
email = form.cleaned_data["email"]
password = form.cleaned_data["password"]
username = User.objects.get(email=email).username
user = auth.authenticate(username=username, password=password)
if user:
(...)
Run Code Online (Sandbox Code Playgroud)