最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django Model層常用驗證器及自定義驗證器詳解

 更新時間:2020年07月15日 15:17:00   作者:藍綠色~菠菜  
這篇文章主要介紹了django Model層常用驗證器及自定義驗證器詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在Django中,對數(shù)據(jù)進行校驗有兩種方式:一種是通過Form校驗,一種是通過Model校驗。在此,我對Model中的校驗方法做下記錄。

示例之前補充以下幾點:

1、Django數(shù)據(jù)校驗方式分為以下三步:

Model.clean_fields() 驗證字段基本規(guī)則比如長度格式等;

Model.clean() 可自定義驗證條件和報錯信息;

Model.validate_unique() 為驗證添加的唯一性約束。

2、此三步驗證通過調(diào)用full_claen(exclude=None, validate_unique=True)來依次執(zhí)行。

exclude:可以用來指定不需要執(zhí)行校驗的field。ModelForm也利用這個參數(shù)來將field排除。

validate_unique:用來指定是否需要執(zhí)行Model.validate_unique()。

3、而full_clean()又是通過調(diào)用is_valid()方法來執(zhí)行。

4、save()執(zhí)行的時候是不會自動調(diào)用full_clean()來進行校驗的。

校驗應該在save()執(zhí)行之前完成,你可以先在form進行校驗,也可以在model中進行校驗。但是,你必須確保通過這兩個校驗之后的數(shù)據(jù)是絕對沒有問題的“干凈”數(shù)據(jù),然后再調(diào)用save()方法將數(shù)據(jù)存儲入庫。

5、校驗中的錯誤處理

我們使用ValidationError來在Model.clean中拋出錯誤,這個錯誤信息將會存儲在以NON_FIELD_ERRORS為key的字典中。這個key是用來存儲對于整個model中的錯誤信息的。

如何獲取校驗的錯誤信息:

from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
try:
  article.full_clean()
except ValidationError as e:
  non_field_errors = e.message_dict[NON_FIELD_ERRORS]

如何指定對于某個特定的field的校驗錯誤信息:

class Article(models.Model):
  ...
  def clean(self):
    if self.status == 'draft' and self.pub_date is not None:
      # raise ValidationError({'pub_date': _('Draft entries may not have a publication date.')})
      raise ValidationError({'pub_date': 'Draft entries may not have a publication date.'})
    ...

如何指定多個field的校驗錯誤信息:

class Article(models.Model):
  ...
  def clean(self):
    if self.status == 'draft' and self.pub_date is not None:
      raise ValidationError({'pub_date': 'Draft entries may not have a publication date.', 
                 'creator': 'Creator can't be null'})
    ...

如何指定全局性校驗錯誤信息:

class Article(models.Model):
  ...
  def clean(self):
    if self.status == 'draft' and self.pub_date is not None:
      raise ValidationError('Draft entries may not have a publication date.')
    ...
 

進入正題:

一、如何使用驗證器:

在驗證某個字段的時候,在模型或者自定義form表單中傳遞一個 validators 參數(shù)用來指定驗證器,進一步對數(shù)據(jù)進行過濾。

或者,通過model中的 Field類型 或者一些參數(shù)就可以指定。

比如 EmailValidator ,我們可以通過 指定字段類型為EmailField 來指定。

比如 MaxValueValidator ,我們可以通過 max_value 、max_length參數(shù)來指定。

class Interview(models.Model):
  feedback = models.TextField(max_length=1024, validators=[MinLengthValidator(20, message='不少于20字')], verbose_name='面試反饋')
  mail = models.EmailField(max_length=64, blank=True, null=True, verbose_name='郵箱')
  age= models.IntegerField(max_value=64, blank=True, null=True, verbose_name='年齡')

二、常用自帶驗證器:

1. MaxValueValidator :驗證最大值。

2. MinValueValidator :驗證最小值。

3. MinLengthValidator :驗證最小長度。

4. MaxLengthValidator :驗證最大長度。

5. EmailValidator :驗證是否是郵箱格式。

6. URLValidator :驗證是否是 URL 格式。

7. RegexValidator :如果還需要更加復雜的驗證,那么我們可以通過正則表達式的驗證。

class Demo(models.Model):
  telephone = models.CharField(validators=[validators.RegexValidator("1[345678]\d{9}",message='請輸入正確格式的手機號碼!')])

三、自定義驗證器:

方法:

如果你想要自定義model的校驗,或者想要修改model的屬性的話,就要重寫clean()方法。

class Interview(models.Model):
  feedback = models.TextField(max_length=1024, validators=[MinLengthValidator(20, message='不少于20字')], verbose_name='面試反饋')
  mail = models.EmailField(max_length=64, blank=True, null=True, verbose_name='郵箱')
  age= models.IntegerField(max_value=64, blank=True, null=True, verbose_name='年齡'
  ...
 
  def clean(self):
    if self.result_1 == InterviewResult.FAIL and len(self.feedback) < 20:
      raise ValidationError({'feedback': '不少于20字'})

效果:

如果你想做一個全局性的錯誤提示,可以這樣:

  ...
  def clean(self):
    if self.result_1 == InterviewResult.FAIL and len(self.feedback) < 20:
      raise ValidationError('不少于20字吧')

效果:

以上這篇django Model層常用驗證器及自定義驗證器詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python中文亂碼不著急,先看懂字節(jié)和字符

    python中文亂碼不著急,先看懂字節(jié)和字符

    這篇文章主要介紹了python中文亂碼不著急,先看懂字節(jié)和字符,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python面向?qū)ο缶幊讨惖姆庋b

    Python面向?qū)ο缶幊讨惖姆庋b

    這篇文章主要介紹了Python面向?qū)ο缶幊讨惖姆庋b封裝指屬性和方法的抽象,屬性的抽象又指對類的屬性進行定義、隔離和保護,下面來看看文章的具體內(nèi)容吧,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • Python打印數(shù)據(jù)類型的全過程

    Python打印數(shù)據(jù)類型的全過程

    這篇文章主要介紹了Python打印數(shù)據(jù)類型的全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 淺談python標準庫--functools.partial

    淺談python標準庫--functools.partial

    這篇文章主要介紹了python標準庫--functools.partial,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 詳解Pytorch+PyG實現(xiàn)GCN過程示例

    詳解Pytorch+PyG實現(xiàn)GCN過程示例

    這篇文章主要為大家介紹了Pytorch+PyG實現(xiàn)GCN過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 10個python爬蟲入門實例(小結)

    10個python爬蟲入門實例(小結)

    這篇文章主要介紹了10個python爬蟲入門實例(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • python之js逆向功能演示詳解

    python之js逆向功能演示詳解

    這篇文章主要為大家介紹了python之js逆向功能演示詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 如何通過Python的pyttsx3庫將文字轉(zhuǎn)為音頻

    如何通過Python的pyttsx3庫將文字轉(zhuǎn)為音頻

    pyttsx3是一個開源的Python文本轉(zhuǎn)語音庫,可以將文本轉(zhuǎn)換為自然的人類語音,這篇文章主要介紹了如何通過Python的pyttsx3庫將文字轉(zhuǎn)為音頻,需要的朋友可以參考下
    2023-04-04
  • 老生常談Python startswith()函數(shù)與endswith函數(shù)

    老生常談Python startswith()函數(shù)與endswith函數(shù)

    下面小編就為大家?guī)硪黄仙U凱ython startswith()函數(shù)與endswith函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python中sub()的用法說明

    Python中sub()的用法說明

    這篇文章主要介紹了Python中sub()的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

松阳县| 开平市| 天镇县| 成安县| 清涧县| 林口县| 区。| 苏尼特左旗| 宜章县| 文化| 石屏县| 多伦县| 南召县| 阿鲁科尔沁旗| 奉新县| 三穗县| 合水县| 嘉善县| 萍乡市| 涿州市| 建昌县| 洞口县| 蓬溪县| 和平区| 无棣县| 杭锦旗| 屯门区| 怀化市| 平邑县| 德庆县| 南阳市| 通化县| 宽甸| 景德镇市| 康平县| 昌吉市| 秭归县| 九江县| 灵寿县| 闵行区| 德保县|