1
P9 2014-07-06 16:38:54 +08:00 1
看的好累…
clean_* 函数,应该是一个检查函数的总入口,validate_*是检查某个值用的把 具体还要看django文档 |
2
izoab 2014-07-06 19:05:53 +08:00
缩进问题实在不行就截图吧。
validate_test我貌似没用过这个,好像是用form.valid还是什么的一个方法,我估计是验证输入类型合规性的,比如你的这个字段本来是int,但输入的是str,那他就会告诉你不对。 clean_content是得到干净的数据,比如django会把一些有风险的支付给转义掉。 |
3
pythoner 2014-07-06 19:19:16 +08:00
clean_*方法用来清理字段用的。把验证的方法写在这里行是行,但是并不提倡这样写
而应该写在validate_*或者 is_valid方法里 让一个函数只做一件特定的事,clean和validate不要混在一起写。 |
4
rcmerci OP @pythoner 那就是说表单的验证都应该在Field的validator=[validate_test,...],都放在这里面吗?而不是在clean_*里面验证数据正确性?
还有我不太清楚 [clean_*方法用来清理字段用的] 这句话,可以解释一下吗? 谢啦:) |
5
pythoner 2014-07-06 19:44:28 +08:00 1
@rcmerci
我举个例子 比如在form中有一个输入框(forms.CharField())叫做tags,它的value是以半角逗号分开的字符串,像这样:“linux,python,database”,那我可以在clean_tags中将它split一下转成一个list方便我存入数据库中(假如我用mongodb) 如果我要验证tags,不允许里面出现'fuck'这个tag,那我应该在validate_tags中来检查 if 'fuck' in cleaned_form.get('tags',[]):raise ValidationError('Your message here') |
6
rcmerci OP @pythoner 谢谢啦,我还有个问题:
比如:validate_test这个函数,可不可以放在一个class TestForm里面作为一个成员函数,还是一定要定义在class外面呢? |
7
no13bus 2014-07-06 20:49:34 +08:00
@rcmerci 我觉得看情况吧。比如这个验证是多个form都回用到的,那么就写到外面,如果仅仅是这个form用 就写在form自己的这个class里面
|
8
vicalloy 2014-07-06 21:36:41 +08:00 1
clean_* 里写校验是django推荐的做法。
validator=[validate_test,...]的做法只是在多个字段校验规则一样,为了提交复用性时才会用到。 具体看django官方文档。django的文档写的非常的好。 https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute https://docs.djangoproject.com/en/dev/ref/validators/ |