【问题标题】:How to customize UserCreationForm validation in django如何在 django 中自定义 UserCreationForm 验证
【发布时间】:2021-05-07 15:43:20
【问题描述】:

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

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

class CreateUserForm(UserCreationForm):
class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']

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

另外,这是默认的 UserCreationForm 相关的注册用户方式吗?还是自己写一个更好?

【问题讨论】:

标签: python django forms web


【解决方案1】:

你要知道UserCreationForm毕竟基本上是一个Django Form。所以表单验证机制适用于它。

As the docs mentions,您可以通过创建一个保存此名称格式的方法来验证自定义字段: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.

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2011-08-10
    • 2018-06-11
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多