色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2024-09-25 10:40:20

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

示例之前補充以下幾點:

1、Django數據校驗方式分為以下三步:

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

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

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

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

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

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

3、而full_clean()又是通過調用is_valid()方法來執行。

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

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

5、校驗中的錯誤處理

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

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

from django.core.exceptions import ValidationError, NON_FIELD_ERRORStry: 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 參數用來指定驗證器,進一步對數據進行過濾。

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

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

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

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字’})

效果:

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

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

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

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

效果:

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

以上這篇django Model層常用驗證器及自定義驗證器詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 亚洲精品久久久久中文字幕一区 | 亚洲男人的天堂久久香蕉网 | 亚洲高清视频在线 | 国产精品一区二区久久精品涩爱 | 久久精品在线观看 | 久久久久欧美精品 | 欧美日韩一日韩一线不卡 | 欧美高清一级 | 在线视频一区二区三区三区不卡 | 热热涩热热狠狠色香蕉综合 | 久久w5ww成w人免费不卡 | 成人区精品一区二区毛片不卡 | 男女午夜 | 欧美一级片 在线播放 | 国产成人高清精品免费5388密 | 精品久久一区二区三区 | 成人午夜性a一级毛片美女 成人午夜亚洲影视在线观看 | 日本韩国一级毛片中文字幕 | 精品国产自在在线在线观看 | 久久精品视频网 | 九九99香蕉在线视频网站 | 欧美午夜伦y4480私人影院 | 天天躁夜夜躁狠狠躁2024 | 亚洲自拍偷拍图 | 99视频在线免费观看 | 尹人在线视频 | 免费视频一区二区 | 精品久久香蕉国产线看观看亚洲 | 黄色毛片视频校园交易 | 久久毛片免费 | 国产一区二区免费播放 | 精品一区二区三区波多野结衣 | 美日韩一区二区 | 一区二区三区免费观看 | 看片亚洲 | 一级做a爰片久久毛片美女 一级做a爰片久久毛片免费看 | 亚洲天堂免费在线 | 亚洲精品久久久久影院 | 99视频有精品 | 欧美日韩高清观看一区二区 | 一级毛片免费不卡在线 |