社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

自定义表单校验validator应该写在什么地方?

lunch650 • 9 年前 • 3364 次点击  

想自己尝试着写一个人员管理系统,有一个表单是提交身份证号码,然后按照身份证号码规则进行校验,看了官方文档里面偶数校验的例子,大概明白了怎么写。但由于初学django,很迷茫的是是不知道这个验证函数应该写在什么地方, 1.是应该写在模板里面的提交文件中吗?还是放在form文件中,还是放在model文件里面呢? 2.如果直接在admin系统里面添加身份证号码,有办法经过校验吗? 希望各位大神给予指教!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1384
 
3364 次点击  
文章 [ 4 ]  |  最新文章 9 年前
lunch650
Reply   •   1 楼
lunch650    9 年前

@cdxfish 感谢指点。 我把自定义的validotor写在了model里面。是这个样子:

def IDValidator(value):
#身份证号码验证
Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
Ti = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
sum = 0
value = value.upper()
if len(value) != 18:
    raise ValueError('请输入18位身份证号码,您只输入了%s位' % len(value))
for i in range(17):
    sum += int(value[i]) * Wi[i]
if Ti[sum%11] != value[17]:
    raise ValueError('请输入正确的身份证号码')

class Person(models.Model):
    #身份证号码
    identification  = models.CharField('身份证号码',max_length=18,unique=True,validators=[IDValidator])

其实如果能力够的话,还可以自定义一个身份证字段。不过现在还不会,慢慢学习中!

lunch650
Reply   •   2 楼
lunch650    9 年前

@cdxfish 感谢大神回复!我现在就自己多看文档多尝试一下!

cdxfish
Reply   •   3 楼
cdxfish    9 年前

补充一下, admin 里面验证也是ok的,无非就是定制admin。 admin本身也是个app, 同样是view+model+modelform。 所以你需要修改的就是这个modelform部分。

给你举个例子:

class YourAdmin(admin.ModelAdmin):
    form=YourForm

当然,还有一些方法可以修改。因为很久没有用django了,就不一一列举了。总之,admin还是很强大的。 小到可以替换一个form来改变数据的显示,大到直接修改一个已有的admin页面,都不在话下。

cdxfish
Reply   •   4 楼
cdxfish    9 年前

首先,你的验证放在 form model 或者view里面都是ok的,没有硬性标准。 但是,如果你的验证是基于form数据输入的话。 建议你放到form 里面。