django - 可以覆盖用户模型以使电子邮件字段成为必需吗?
问题描述
对于我的应用程序,Django 中的电子邮件字段User model
应该是必需的,但默认情况下它是可选的。
我搜索了这个问题,但我发现的大多数答案都是关于在自定义UserCreationForm
中设置所需的电子邮件字段,例如:
class CustomUserForm(UserCreationForm):
"""Provide a view for creating users with only the requisite fields."""
class Meta:
model = User
# Note that password is taken care of for us by auth's UserCreationForm.
fields = ('username', 'email')
def __init__(self, *args, **kwargs):
super(CustomUserForm, self).__init__(*args, **kwargs)
self.fields['email'].required = True
但我也想在User
模型中强制发送电子邮件,因为我在想可能ModelForm
是前端的东西,并且用户可能通过使用 chrome 开发工具关闭了所需的条件,我错了吗?在用户中设置所需的电子邮件ModelForm
是否与在用户中设置相同model
,或者我可以覆盖用户模型以使电子邮件成为必需?
解决方案
也许 ModelForm 是一个前端的东西,用户可能通过使用 chrome 开发工具关闭了所需的条件,我错了吗?
您是正确的,用户可以使用工具来制作不需要的输入项,实际上您通常可以更改 DOM 并因此更改 HTML 表单,或者更简单地使用诸如curl
发出 POST 请求之类的工具,您可以发布任意数据。
但是 a Form
(在某种程度上是 a ModelForm
)不仅在 HTML 中呈现表单,它还用于验证数据。因此,这意味着如果您使用以下视图:
def my_view(request):
if request.method == 'POST':
form = CustomUserForm(request.POST, request.FILES)
if form.is_valid():
# …
# …
# …
如果用户未填写电子邮件地址,form.is_valid()
则将返回。False
因此,表单用于验证、清理数据、将数据存储在模型中以及呈现 HTML 表单。
推荐阅读
- javascript - 使用循环的方法,编写程序打印9到N的表格
- amazon-web-services - 使用 AWS API Gateway 和 Lambda 的地理定位服务
- jsp - 带有“%=”标记的 VScode eslint 解析器错误
- sql - 希望显示最新的日期时间列
- msal.js - 服务器端渲染失败:错误 ReferenceError:未定义窗口
- java - 有没有办法使用 appium 将 VPN 信息添加到 aws devicefarm 设备池中的设备?
- c - 向主函数声明局部变量
- php - 不能在每个循环内设置变量数据
- javascript - 如何为垂直线提供动态高度
- javascript - 从 Node/Express 服务器在 React 中播放音频数据