• 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)


     
  • 相关阅读:
    shopping car 1.0
    文件分类
    求1-100的所有数的和
    输出 1-100 内的所有奇数和
    求1-2+3-4+5 ... 99的所有数的和
    关闭提示的下拉框
    h5页面乱码-设置编码
    常用的css
    渲染后新元素没有绑定事件
    爬虫日记-关于一些动态爬取
  • 原文地址:https://www.cnblogs.com/liubailiang/p/11470754.html
Copyright © 2020-2023  润新知