如何验证在Django中创建的注册表单中输入的数据?

如何验证在Django中创建的注册表单中输入的数据?,django,django-models,django-views,django-forms,django-authentication,Django,Django Models,Django Views,Django Forms,Django Authentication,我使用Django中的类models.User()创建了一个注册表,如下所示: from Django.shortcuts import render, redirect from django.contrib.auth.models import User def register(request): if request.method == 'POST': username = request.POST['username'] email = req

我使用Django中的类models.User()创建了一个注册表,如下所示:

from Django.shortcuts import render, redirect
from django.contrib.auth.models import User

def register(request):
    if request.method == 'POST':
        username = request.POST['username']
        email = request.POST['email']
        password = request.POST['password']
        confirm_password = request.POST['confirm_password']

        if password == confirm_password:
            # some code
            user = User.objects.create_user(username=username, email=email, password=password)
            user.save()
            return redirect('login')

        else:
            return redirect('register')

    return render(request, 'register.html')
我的问题:

  • 现在我想将全名设置为可选,但所有其他字段都是必需的,我还想对我的字段应用长度约束,我该怎么做?由于这是一个内置模型(),我不知道如何设置blank=True或对任何字段使用max\u length

  • 此外,在使用
    user.save()
    保存数据之前,我还想删除输入数据末尾和开头的空格(如果有)(例如,如果有人以“abc efg”的形式输入名称,我想将其另存为“abc efg”)。基本上,我想使用Django表单的
    .is\u valid()
    特性。我甚至试着这样做:

    from django.shortcuts import render, redirect
    from django.contrib.auth.models import User
    
    def register(request):
        if request.method == 'POST':
    
            form = User(request.POST or None)
    
            if form.is_valid():
                username = request.POST['username']
                email = request.POST['email']
                password = request.POST['password']
                confirm_password = request.POST['confirm_password']
    
                if password == confirm_password:
                    # some code
                    user = User.objects.create_user(username=username, email=email, password=password)
                    user.save()
                    return redirect('login')
    
                else:
                    return redirect('register')
    
            else:
                return redirect('register')
        return render(request, 'register.html')
    
    
  • 但这给了我以下错误:
    “User”对象没有属性“is\u valid”


    关于如何在使用内置模型时使字段可选/必需并设置字段的最大长度和删除尾随空格(如果有的话)有什么想法吗?

    根据django文档,最好通过继承AbstractBaseUser来创建您自己的用户模型: 在这里,您可以定义哪些是可选的,哪些不是


    哦,当你在看的时候——也许它也值得一看。现在可能不太相关,但今后肯定会如此!还可以查看自定义表单。

    根据django文档,最好通过继承AbstractBaseUser来创建自己的用户模型: 在这里,您可以定义哪些是可选的,哪些不是


    哦,当你在看的时候——也许它也值得一看。现在可能不太相关,但今后肯定会如此!还可以查看自定义表单。

    您需要先声明表单。如果您使用的是默认的django用户,则可以使用以下用户验证数据:

    from django.contrib.auth.forms import UserCreationForm
    
    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST or None)
            if form.is_valid():
               form.save()
               # rest of the code
    
    现在,假设您想要清理从HTML表单中获得的数据,那么您可以使用
    clean\uu
    方法。要在
    UserCreationForm
    中执行此操作,您可以覆盖它(还可以添加一些代码以显示如何自定义表单):


    有关的详细信息,请参阅文档。

    您需要先声明表单。如果您使用的是默认的django用户,则可以使用以下用户验证数据:

    from django.contrib.auth.forms import UserCreationForm
    
    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST or None)
            if form.is_valid():
               form.save()
               # rest of the code
    
    现在,假设您想要清理从HTML表单中获得的数据,那么您可以使用
    clean\uu
    方法。要在
    UserCreationForm
    中执行此操作,您可以覆盖它(还可以添加一些代码以显示如何自定义表单):


    有关的详细信息,请参阅文档。

    好的,因此,我从您的解决方案中了解到,我在上面的代码中使用的django
    用户
    是一个
    模型
    ,为了在保存到模型中之前验证数据,我需要单独创建一个
    Modelform
    ,而不是创建我自己的表单,我可以使用
    UserCreationForm
    (它甚至可以被覆盖以添加一些字段或条件),我说得对吗?UserCreationForm中还有一个疑问,即有3个预定义字段username、password1和password2…因此,当我执行form.save()时,
    password1
    (==password2)从
    UserCreationForm
    自动保存在
    User
    模型的
    password
    中?我很困惑,因为UserCreationForm和User model中的password有不同的名称是的,你说得对。密码字段应该很好,因为你使用的是Django的用户模型哦,很好,非常感谢你的帮助!好的嗯,所以我从您的解决方案中了解到,我在上面的代码中使用的django
    用户
    是一个
    模型
    ,为了在保存到模型中之前验证数据,我需要单独创建一个
    Modelform
    ,而不是创建我自己的表单,我可以使用
    UserCreationForm
    (它甚至可以被覆盖以添加一些字段或条件),我说得对吗?UserCreationForm中还有一个疑问,即有3个预定义字段username、password1和password2…因此,当我执行form.save()时,
    password1
    (==password2)从
    UserCreationForm
    自动保存在
    User
    模型的
    password
    中?我很困惑,因为UserCreationForm和User model中的password有不同的名称是的,你说得对。密码字段应该很好,因为你使用的是Django的用户模型哦,很好,非常感谢你的帮助!