models.py代码:
from django.db import models
class User(models.Model):
account = models.CharField(max_length=255, primary_key=True)
passwd = models.CharField(max_length=255)
def __str__(self):
return self.account
class Meta:
db_table = "user"
form.py代码:
from django import forms
from user.models import User
class UserForm(forms.ModelForm):
account = forms.CharField(label='账号', required=True)
passwd = forms.CharField(label='密码', widget=forms.PasswordInput(), required=True)
class Meta:
model = User
fields = {'account', 'passwd'}
登陆代码段:
def login(request):
if request.method == 'POST':
form = UserForm(request.POST) # 关联前端表单数据 和 后台表单类
if form.is_valid(): # 验证表单数据是否合法
account = form.cleaned_data['account']
passwd = form.cleaned_data['passwd']
user = User.objects.filter(account=account)
if user:
if check_password(passwd, user.passwd):
return HttpResponse('登陆成功!')
else:
return HttpResponse('密码错误!')
else:
return HttpResponse('用户不存在!')
else:
return HttpResponse(str(form.errors))
else:
form = UserForm()
return render(request, 'user/login.html', {'form': form})
注册代码段:
def register(request):
if request.method == 'POST':
user = User()
form = UserForm(request.POST)
if form.is_valid():
pwd = form.cleaned_data['passwd']
user = form.save(commit=False)
user.passwd = make_password(pwd, None, 'pbkdf2_sha256')
user.save()
return HttpResponse('注册成功!')
else:
return HttpResponse(str(form.errors))
# try:
# user.save(force_insert=True)
# except IntegrityError:
# return HttpResponse('账号重复!')
# return HttpResponse('注册成功!')
else:
form = UserForm()
return render(request, 'user/register.html', {'form': form})
当我登陆时, form.is_valid() 会显示false,无法进入到保存数据库的代码段中。并且 form.errors 会显示如下信息。
我估计是它把我的这一步理解成要新建数据了,但是我的登陆代码里完全没有与save有关的代码。而且程序在运行到 form = UserForm(request.POST) ,但还有没有到 form.is_valid() 的时候,就可以发现这个错误已经出现了。不知道是为什么。