我有我自己的HTML表单,我正在使用AbstractUser创建我自己的模型,我面临的问题是当我试图注册新用户时,我需要判断密码和确认密码字段是否匹配.如果不匹配,则需要抛出错误消息.我已经在"views.py"中写了下面的逻辑,问题是即使密码不匹配,也会在后端创建新用户.我不确定我在这里做错了什么.

def registerPage(request):
    #form = UserCreationForm()
    user = User()
    if request.method == "POST":
        user.first_name = request.POST.get('txtFName')
        user.last_name = request.POST.get('txtFName')
        user.username = request.POST.get('txtUserName').lower()
        user.email = request.POST.get('txtEmail').lower()
        password1 = request.POST.get('txtPassword')
        password2 = request.POST.get('txtConfPassword')

        if password1 == password2:
             user.set_password(password2)
        else:
            messages.error(request, "Password and Confirm password do not match. Try again")

        user.is_superuser = False
        user.save()
        login(request, user)
        return redirect('home')

    return render(request,'login_register.html')

推荐答案

只有在成功的情况下才应保存重定向,否则将使用"空"密码构造用户:

def registerPage(request):
    # form = UserCreationForm()
    user = User()
    if request.method == "POST":
        user.first_name = request.POST.get('txtFName')
        user.last_name = request.POST.get('txtFName')
        user.username = request.POST.get('txtUserName').lower()
        user.email = request.POST.get('txtEmail').lower()
        password1 = request.POST.get('txtPassword')
        password2 = request.POST.get('txtConfPassword')

        if password1 == password2:
            user.set_password(password2)
            user.is_superuser = False
            user.save()
            login(request, user)
            return redirect('home')
        else:
            messages.error(
                request, "Password and Confirm password do not match. Try again"
            )

    return render(request, 'login_register.html')

Note:最好是用Form [Django-doc] 而不是执行数据的手动验证和清理.A Form不会 只需将rendering个表单简化为Html,但它也使它更方便 将输入设置为validate,将数据设置为更方便的类型.

Django相关问答推荐

如何访问 django 模板中的字典值?

获取 Django (postgres) 中带注释字段的平均值

Django:使用相同的外键在不同的应用程序中 Select 多个列

Django - 是否可以为查询集预取单个字段的多个过滤器?

QuerySet对象在bulk_update中没有属性pk

相同的字符串不同的翻译

Django ORM 和锁定表

文档中的 Mongoengine creation_time 属性

从python中的URL获取查询字符串的最佳方法?

如何运行克隆的 Django 元素?

Django 自定义管理器 - 如何仅返回登录用户创建的对象?

如何测试某个日志(log)消息是否记录在 Django 测试用例中?

Python 和 Django OperationalError (2006, 'MySQL server has gone away')

Django 模板和变量属性

ImportError:升级到 Django 4.0 后无法从 'django.conf.urls' 导入名称 'url'

如何以编程方式对 Django 中的用户进行身份验证?

django 如何知道已经运行了哪些迁移?

它是如何工作的,Django INSTALLED_APPS 的命名约定?

Django - 指定 Django 管理员应该使用哪个模型管理器

ValueError: 无法解析相关模型 u'app.model'