zoukankan      html  css  js  c++  java
  • Django

    自定义Form校验规则

    class MyForm(forms.Form):
        # form可以校验的规则
        username = fields.CharField(max_length=32,min_length=3)  
        password = fields.CharField(max_length=32,min_length=3)
        re_password = fields.CharField(max_length=32,min_length=3)   
    

    局部钩子 - 校验用户名不能重复

    def clean_username(self):
        # 获取username
        username = self.cleaned_data['username']
    
        # 判断用户名是否存在
        if models.User.objects.filter(username=username).count():
            # 存在即不符合规则,必须抛出ValidationError异常
            raise ValidationError('该用户名已存在')
        # 校验通过,则返回清洗后的数据
        return self.cleaned_data['username']
    

    全局钩子 - 检验两次密码输入一致

    def clean(self):
        # 获取两次输入的密码
        password = self.cleaned_data['password']
        re_password = self.cleaned_data['re_password']
        
        # 判断是否相等,相等则返回数据,否则抛出ValidationError异常
        if password == re_password:
            return self.cleaned_data
        else:
            raise ValidationError('两次密码输入不一致')  # 错误信息放在“__all__”里
    

    注意:全局钩子与局部钩子的函数名、判断异常和返回值都是根据内部源码写的

    1. 函数名为“clean_字段名”或者“clean”

    2. 数据校验有误,只能抛ValidationError异常,因为在源码中捕获ValidationError异常

    3. 数据校验成功,返回数据

  • 相关阅读:
    微博二级评论爬取
    爬取genome的网页和图片
    一个数据结构转换的问题
    SQLAlchemy ORM教程之二:Query
    SQLAlchemy中filter()和filter_by()有什么区别
    词云加显示条形图
    智联招聘的python岗位数据词云制作
    Python标准库——collections模块的Counter类
    MySQL5.6 windows msi安装介绍
    ICSharpCode.SharpZipLib.Zip
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11454836.html
Copyright © 2011-2022 走看看