如何在 django 中自定义 UserCreationForm 验证

2 python forms django web

我目前正在尝试使用 UserCreationForm 构建用户注册表单,但它不适合我的需求。首先,用户名字段不仅接受字母符号和数字,还接受@。+ - _。我想让它只接受拉丁文和西里尔文字母和数字,但我找不到任何信息。我还想更改它的其他属性,例如最大长度。此外,在我们进行这些更改之后,客户端和服务器端验证过程都会拒绝禁用符号吗?

这是我在 forms.py 中已有的一些代码:

class CreateUserForm(UserCreationForm):
class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']
Run Code Online (Sandbox Code Playgroud)

和views.py:

def register(request):
form = CreateUserForm()

if request.method == 'POST':
    form = CreateUserForm(request.POST)
    if form.is_valid():
        form.save()

context = {'form': form}
return render(request, 'register.html', context)
Run Code Online (Sandbox Code Playgroud)

另外,这个默认的 UserCreationForm 是否与注册用户相关?或者我自己写一个会更好吗?

Moh*_*369 5

你必须知道这毕竟UserCreationForm是一个 Django 。Form因此表单验证机制适用于它。

正如文档提到的,您可以通过创建一个保存此名称格式的方法来验证自定义字段:clean_<field name>,在您的情况下是:clean_username

这是现场清洁方法的示例:

def clean_username(self):
    username = self.cleaned_data['username']
    # Do whatever you want
    if error_case: # Write your own error case.
        raise forms.ValidationError("Error Message") # Your own error message that will appear to the user in case the field is not valid
    return email # In case everything is fine just return user's input.

Run Code Online (Sandbox Code Playgroud)