gpt4 book ai didi

django - 为什么 Django 在创建新用户时不检查电子邮件完整性?

转载 作者:行者123 更新时间:2023-12-02 09:56:02 25 4
gpt4 key购买 nike

我不明白这种行为。假设我打开 Django shell 并输入:

from django.contrib.auth.models import User
user = User.objects.create(username="toto", email="titi")

为什么 Django 让我创建这个用户(使用无效的电子邮件)而不引发错误?

我在使用 tastypie 创建的 API 中的 POST 中创建用户时也有同样的“无验证行为”。

问题是:

由于 Django 似乎没有自己检查这一点,所以我应该在哪里执行这种验证,这样我就不必多次编写它们(因为可以通过网站、API 等多种方式创建用户,等)?

谢谢。

最佳答案

如果您只调用 .create().save(),Django 不会隐式执行任何验证 - 您需要显式使用 model validation ,或通过保存对象 ModelForm 。您的模型验证示例如下所示:

user = User(username="toto", email="titi")
try:
user.full_clean()
except ValidationError as e:
# handle the error...
pass
user.save()

或者使用ModelForm:

class UserForm(forms.ModelForm):
class Meta:
model = User

f = UserForm(dict(username="toto", email="titi"))
if f.is_valid():
user = f.save()
else:
# handle error, ...
pass

模型验证和 ModelForm 都会调用模型字段的验证器,因此对于用户 的电子邮件,不需要进行额外的验证工作。如果您需要进行自定义验证,you can do this in the ModelForm class - 应用程序中通常有一个 forms.py 文件作为 FormModelForm 的中心位置。

Tastypie 也是如此 - 默认配置假设提交的数据有效。您可以使用FormValidation覆盖它类,它使用 Django FormModelForm 进行验证。完整的示例如下所示:

class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
validation = FormValidation(form_class=UserForm) # UserForm from above
# more options here....

关于django - 为什么 Django 在创建新用户时不检查电子邮件完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22719960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com