【发布时间】:2017-09-11 10:09:34
【问题描述】:
在我的 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
用于验证这一点:
from django import forms
from .validators import validate_url
class SubmitUrlForm(forms.Form):
url = forms.CharField(label="Submit URL",validators=[validate_url])
当我输入google.co.in 之类的 URL,并在从 validate_url 返回之前打印该值时,它会打印http://google.co.in,但是当我尝试在我的视图中获取cleaned_data['url'] 时,它仍然显示google.co.in。那么我的验证器返回的值去哪里了,我需要显式编辑 clean() 函数来更改 url 字段值吗?
文档是这样说的:
Field 子类上的 clean() 方法负责以正确的顺序运行 to_python()、validate() 和 run_validators() 并传播它们的错误。如果在任何时候,任何方法引发 ValidationError,验证将停止并引发该错误。该方法返回干净的数据,然后将其插入到表单的cleaned_data字典中。
我仍然不确定验证器返回值的去向以及是否可以使用验证器更改cleaned_data dict。
【问题讨论】:
标签: python django validation