向 Django 用户表单添加验证
Adding validation to Django User form
我想自定义 Django/Mezzanine 中的用户注册表单以仅允许某些电子邮件地址,因此我尝试按如下方式进行猴子修补:
# Monkey-patch Mezzanine's user email address check to allow only
# email addresses at @example.com.
from django.forms import ValidationError
from django.utils.translation import ugettext
from mezzanine.accounts.forms import ProfileForm
from copy import deepcopy
original_clean_email = deepcopy(ProfileForm.clean_email)
def clean_email(self):
email = self.cleaned_data.get("email")
if not email.endswith('@example.com'):
raise ValidationError(
ugettext("Please enter a valid example.com email address"))
return original_clean_email(self)
ProfileForm.clean_email = clean_email
此代码添加在我的 models.py
之一的顶部。
然而,当我运行服务器时,我得到了可怕的
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
如果我加上
import django
django.setup()
然后 python manage.py runserver
挂起直到我 ^C
.
我应该怎么做才能添加此功能?
为您的一个应用程序创建一个文件 myapp/apps.py
(我在这里使用 myapp
),并定义一个应用程序配置 class 在 [=14] 中进行猴子修补=]方法。
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
# do the imports and define clean_email here
ProfileForm.clean_email = clean_email
然后在 INSTALLED_APPS
设置中使用 'myapp.apps.MyAppConfig'
而不是 'myapp'
。
INSTALLED_APPS = [
...
'myapp.apps.MyAppConfig',
...
]
您可能需要将 Mezzanine 置于应用配置之上才能正常工作。
我想自定义 Django/Mezzanine 中的用户注册表单以仅允许某些电子邮件地址,因此我尝试按如下方式进行猴子修补:
# Monkey-patch Mezzanine's user email address check to allow only
# email addresses at @example.com.
from django.forms import ValidationError
from django.utils.translation import ugettext
from mezzanine.accounts.forms import ProfileForm
from copy import deepcopy
original_clean_email = deepcopy(ProfileForm.clean_email)
def clean_email(self):
email = self.cleaned_data.get("email")
if not email.endswith('@example.com'):
raise ValidationError(
ugettext("Please enter a valid example.com email address"))
return original_clean_email(self)
ProfileForm.clean_email = clean_email
此代码添加在我的 models.py
之一的顶部。
然而,当我运行服务器时,我得到了可怕的
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
如果我加上
import django
django.setup()
然后 python manage.py runserver
挂起直到我 ^C
.
我应该怎么做才能添加此功能?
为您的一个应用程序创建一个文件 myapp/apps.py
(我在这里使用 myapp
),并定义一个应用程序配置 class 在 [=14] 中进行猴子修补=]方法。
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
# do the imports and define clean_email here
ProfileForm.clean_email = clean_email
然后在 INSTALLED_APPS
设置中使用 'myapp.apps.MyAppConfig'
而不是 'myapp'
。
INSTALLED_APPS = [
...
'myapp.apps.MyAppConfig',
...
]
您可能需要将 Mezzanine 置于应用配置之上才能正常工作。