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



我已经使用类模型创建了一个注册表。Django中的用户(参考(如下:

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')

我的问题:

  1. 现在我想让全名作为可选,但所有其他字段都是必需的。我还想对我的字段应用长度约束,我该怎么做?由于这是一个内置模型(classmodels.User(,我不知道如何将blank=True或对任何字段使用max_length

  2. 此外,在使用user.save()保存数据之前,我希望删除输入数据末尾和开头的空格(如果有((例如,如果有人将名称输入为"abc efg">,我希望将其保存为&"abc efg&"

    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' object has no attribute 'is_valid'

关于如何使字段可选/必需并设置字段的最大长度的任何想法&删除尾部空格(如果有的话(,同时使用内置的模型类模型。使用者

根据django文档,最好通过继承AbstractBaseUser来创建自己的用户模型:https://docs.djangoproject.com/en/3.1/topics/auth/customizing/#specifying-自定义用户模型在那里你可以定义什么是可选的,什么不是。

哦,当你在看的时候——也许这也值得一看django allaush。也许现在不太重要,但以后肯定会如此!还可以查看自定义表单。

您需要首先声明一个表单。如果您使用默认的django用户,那么您可以使用UserCreationForm来验证数据:

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_<field_name>方法。要在UserCreationForm中做到这一点,您可以覆盖它(还可以添加一些代码来展示如何自定义表单(:

class CustomUserForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.') 
def clean_first_name(self):
return self.cleaned_data['first_name'].strip()

有关表单中的验证和清洁数据的更多信息,请参阅文档。

最新更新