• Form表单验证(进阶)


    #  -----------------Form表单的钩子函数------------------

     

      #  全局钩子函数: 可以拿到所有的已经验证字段的值

    #   重新父类的clean方法可以做到全局验证,因为Form对象循环校验所有字段后会执行一次clean()方法 在clean()中可以对所有字典再做一次校验
        def clean(self):
            ''''''
            for k,v in self.cleaned_data.items():
                print(k,v)
                if re.search(r'haha', str(v)):
                    # 将错误信息添加到self._errors中字典中  k对应字段名, 后面填错误信息
                    self.add_error(k,'信息中包含haha 不合法')  
              raise ValidationError('信息中包含haha 不合法')
           else:
              return self.cleaned_data

      #  局部钩子函数:只能拿到已经验证的当前字段以及之前的字段的值(因为Form是按顺序循环验证的 for k,v in self.fileds.items():)

    #   当每个字段调用完clean()方法时还会 调用hasattr(clean_%s,字段名)
    
    #  添加新方法 def clean_字段名(self)
        def clean_username(self):
            '''校验成功则返回成功后的用户名, 失败则将错误信息添加到_errors字典中  等同于返回None
                然后cleaned__data中对应字段的数据会变为 cleaned_data[字段名] = None
            '''
            username = self.cleaned_data.get('username')
            if username.startswith('s'):
           
           raise ValidationError('用户名不能以s开头') # 当抛出异常时,django内部会捕获异常 然后调用self.add_error(当前字段名,错误信息) 添加进错误字典里
         else: return username (或者 新的值)

    注意: 

      在局部钩子函数里抛出异常会将错误信息添加到对应字段上{'字段名':‘错误信息’}

        在全局钩子函数里抛出异常默认会将错误信息添加到全局错误信息上{'__all__':'错误信息'’} ,所以在全局钩子函数里应该自行调用self.add_error将错误信息添加到对应

    字段上


    # ORM中把一个对象转换成字典格式

    from django.forms import model_to_dict
    
    book_obj = models.Book.objects.filter(id=edit_id).first()
    book_dict = model_to_dict(book_obj)


     
  • 相关阅读:
    PHP中字符串和正则表达式的常用函数
    PHP基础语法
    vscode新手心得
    socket数据通讯
    PHP 登录类
    PHP Session 封装类
    php 邮箱验证函数
    PHP MySql 分页实例
    Bootstrap
    projact mail
  • 原文地址:https://www.cnblogs.com/liubailiang/p/11470754.html
Copyright © 2020-2023  润新知