Lut*_*elt 5 python django validation frameworks django-forms
有关于Django Form验证的相当精确的文档 (从Django 1.10开始),我已经成功使用它,所以我的问题是什么?
我的问题是记住这些东西.
该框架涉及冗余,不规则,一些非显而易见的名称,当然还有很多幕后自动化,我似乎无法将其保留在我的脑海中.
有人可以提供比原始文档扫描更快的描述 吗?
Lut*_*elt 10
假设您有一个Form类MyForm,myform
其中包含一个名为且包含各种Fields的实例,特别是一个我们用作示例的
SomeField字段somefield来了解正在发生的事情.
SomeField可以来自Django或您自己的代码.
Form验证过程这些是Django将要执行或尝试的验证步骤:
SomeField.to_python(self, value)
myformvalue转换为其Python目标类型(例如int)valuevalue强制进入适当的Python类型SomeFieldValidationErrorSomeField.validate(self, value)
myformvalueValidationErrorSomeField.run_validators(self, value)
myformmyform.somefieldvalueValidationError将ValidationError验证器中的所有s 组合成一个SomeField.clean(self, value)
myformto_python,validate和run_validatorsvalueto_pythonmyform.cleaned_dataValidationError其他操作引发的任何问题MyForm.clean_somefield(self)
myform都有这样的方法somefield在本地验证self.cleaned_data现在不再只是字符串!)somefieldmyform.cleaned_dataValidationErrorField.clean调用在同一循环中发生.MyForm.clean(self)
myform一次self.cleaned_data现在不再只是字符串!)cleaned_data myform.cleaned_dataself.add_error或提高ValidationError.后者将最终进入myform.non_field_errors().cleaned_data,因为缺少的字段将丢失.ModelFormsModelForm最后添加了一个步骤的验证:
myform.instance.full_clean():在相应的模型实例(如果有)上调用验证.并且ModelForm's clean方法还可以通过此instance属性访问模型实例.
为了使myform你想要的验证,你有不同的可能性:
SomeField类级别,您可以覆盖
SomeField.to_python或SomeField.validate(例如通过子类化)MyForm,您可以实现MyForm.clean_somefield或只注册验证器:
somefield = SomeField(validators=[somevalidator]).
django.core.validators自定义验证器
.self作为第一个参数.MyForm.clean.可以通过各种方式触发此验证过程:
myform.full_clean()myform.is_valid()myform.errors等| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |