电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:3日期: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
相關文章:
主站蜘蛛池模板: 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 不锈钢发酵罐_水果酒发酵罐_谷物发酵罐_山东誉诚不锈钢制品有限公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 湖南教师资格网-湖南教师资格证考试网| 【连江县榕彩涂料有限公司】官方网站 | 合肥网带炉_安徽箱式炉_钟罩炉-合肥品炙装备科技有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 永嘉县奥阳陶瓷阀门有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 深圳公司注册-工商注册公司-千百顺代理记账公司| 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 无锡网站建设_企业网站定制-网站制作公司-阿凡达网络 |