Kra*_*ash 6 python django validation
在我的django应用程序中,这是我的validator.py
from django.core.exceptions import ValidationError
from django.core.validators import URLValidator
def validate_url(value):
url_validator = URLValidator()
url_invalid = False
try:
url_validator(value)
except:
url_invalid = True
try:
value = "http://"+value
url_validator(value)
url_invalid = False
except:
url_invalid = True
if url_invalid:
raise ValidationError("Invalid Data for this field")
return value
Run Code Online (Sandbox Code Playgroud)
用于验证这一点:
from django import forms
from .validators import validate_url
class SubmitUrlForm(forms.Form):
url = forms.CharField(label="Submit URL",validators=[validate_url])
Run Code Online (Sandbox Code Playgroud)
当我输入类似URL google.co.in,并在从validate_url返回之前打印该值http://google.co.in时,它会打印,但是当我尝试获取cleaned_data['url']我的视图时,它仍会显示google.co.in.那么我的验证器返回的值在哪里去,我是否需要显式编辑clean()函数来更改url字段值?
该文件说明如下:
Field子类上的clean()方法负责以正确的顺序运行to_python(),validate()和run_validators()并传播它们的错误.如果在任何时候任何方法引发ValidationError,则验证停止并引发该错误.此方法返回干净数据,然后将其插入到表单的cleaning_data字典中.
我仍然不确定验证器返回值的位置以及是否可以使用验证器更改cleaning_data dict.
来自文档:
验证器只是一个可调用的对象或函数,它接受一个值,如果值有效则只返回任何内容,否则引发ValidationError.
简单地忽略返回值.
如果你希望能够修改您可以使用值clean_字段的形式描述这里:
class SubmitUrlForm(forms.Form):
url = ...
def clean_url(self):
value = self.cleaned_data['url']
...
return updated_value
Run Code Online (Sandbox Code Playgroud)
验证器仅用于验证数据,因此这就是验证验证器的返回值被忽略的原因.
您正在寻找数据"清理"(以常见形式转换).在Django中,Forms负责数据清理.
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |