【问题标题】:Change validation rules in forms of 3rd part apps更改第 3 部分应用程序形式的验证规则
【发布时间】:2012-10-02 10:17:17
【问题描述】:

我正在使用第 3 部分应用程序(django-registration),并且需要修改验证规则以符合自己的喜好。

一种方法是扩展表单(RegistrationForm),并用我自己的验证规则覆盖字段。

#registration/forms.py
class RegistrationForm(forms.Form):
    username = forms.RegexField(regex=r'^[\w.@+-]+$',
                                max_length=30,
                                ...
                                )
    ...

在我自己的应用中:

class RegistrationForm(RegistrationForm):
    username = forms.RegexField(regex=r'(?ui)^[\w.@+-]+$',
                                min_length=3,
                                max_length=20,
                                ...
                                )
    ...

但是我应该把这个扩展形式放在我自己的代码中总是一个问题。

另外一个思路是把注册app嵌入到我自己的项目文件夹中,直接修改。这样做更容易,但感觉就像是关于 OOP 的问题。

想知道最好的方法是什么?

【问题讨论】:

    标签: django django-forms django-registration


    【解决方案1】:

    django-registration 特别提供了相当多的可扩展性。 The register view allows a form_class parameter

    您可以覆盖 register 视图的默认 URL,并将 form_class 设置为您想要的任何表单类,以按照您需要的方式进行验证(我建议像您在示例代码中那样子类化 RegistrationForm) .

    类似这样的东西(在你的主要 urls.py 中):

    url(r'^accounts/register/$', 'registration.views.register', {
         'backend': 'registration.backends.default.DefaultBackend',
         'form_class': MyRegistrationForm}, name='registration_register'),
    (r'^accounts/', include('registration.backends.default.urls')),
    

    【讨论】:

    • 抱歉@Gonzalo 回复晚了。谢谢(你的)信息!实际上,我更关心是否有放置MyRegisterationForm 定义的好地方,我应该创建一个名为“custom_registration”的应用程序,该应用程序仅用于从注册中对事物进行子类化,还是应该将其放在项目根目录中的forms.py ?由于我遇到了很多修补问题,是否有此类事情的最佳实践?
    • 我不认为有这样的约定。如果它只是表单定义,我会将其放在我项目中的“customizations”目录下的 forms.py 文件中。将它放在项目根目录中的 forms.py 文件中也很好,如果使用 Django 1.4 会很有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多