qq_39376614 2020-03-23 21:59 采纳率: 0%
浏览 798
已结题

Django 写的登陆功能,当我登陆时,form.is_valid() 总是返回false,并提示用户名已存在

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() 的时候,就可以发现这个错误已经出现了。不知道是为什么。

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-23 23:52
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料