python数据校验_最近抽空造了一个数据校验的轮子 Python -validator

最近抽空造了一个数据校验的轮子 python-validator。

在开发 web 应用时,经常需要校验前端传入的数据。如果使用 Django,那么可以使用自带的 forms 进行数据校验。

python-validator 的灵感也是来源于 Django 的 forms (类似 ORM 的方式定义数据结构),不过 python-validator 更加纯粹,只是数据校验,另外也支持使用 dict 定义数据结构,相比于使用类更加方便。

欢迎大家提建议。觉得不错麻烦给个 star 吧!

下面是简单的介绍:

python-validator 是一个类似于 Django ORM 的数据校验库,适用与任何需要进行数据校验的应用,比较常见的是 Web 后端校验前端的输入数据。

特性

支持 python2 和 python3。

使用类描述数据结构,数据字段一目了然。另外也支持使用字典定义数据结构。

可以自动生成用于测试的 mocking data。

可以打印出清晰的数据结构。

易于扩展。

依赖

six

IPy

pytz[可选,DatetimeField 的 tzinfo 参数需要一个 tzinfo 对象]

安装

pip install python-validator

快速入门

假设现在正在开发一个上传用户信息的接口 POST /api/user/,用户信息如下:

name

string,必选。

age

integer,可选,默认 20。

sex

string, 'f'表示女, 'm'表示男。可选, 默认 None。

原始的、枯燥无味的、重复性劳动的数据校验代码可能是下面这样:

def user(request):

# data = json.loads(request.body)

data = {

'age': '24f',

'sex': 'f'

}

name = data.get('name')

age = data.get('age', 20)

sex = dage.get('sex')

if name is None or len(name) == 0:

return Response('必须提供 name', status=400)

try:

age = int(age)

except ValueError as e:

return Response('age 格式错误', status=400)

if sex is not None and sex not in ('f', 'm'):

return Response('sex 格式错误', status=400)

user_info = {

'name': name,

'age': age,

'sex': sex,

}

...

上面这段代码总的来说有几个问题:

枯燥无味和重复性代码,不断的取出数据,检查字段是否缺失,类型是否合法等等。

从数据校验的代码无法轻易看出用户信息的数据结构,即字段是什么类型的,是否可选,默认值是什么。

使用 python-validator 校验数据

首先定义一个 UserInfoValidator 类

# validators.py

from validator import Validator, StringField, IntegerField, EnumField

class UserInfoValidator(Validator):

name = StringField(max_length=50, required=True)

age = IntegerField(min_value=1, max_value=120, default=20)

sex = EnumField(choices=['f', 'm'])

接下来使用 UserInfoValidator 进行数据校验,

from .validators import UserInfoValidator

def user(request):

# data = json.loads(request.body)

data = {

'age': '24',

'sex': 'f'

}

v = UserInfoValidator(data)

if not v.is_valid():

return Response({'msg': v.str_errors, 'code': 400}, status=400)

user_info = v.validated_data

...

v.str_errors 是一个字段名 - 错误信息的 dict,例如:

{'age': 'got a wrong type: str, expect integer', 'name': 'Field is required'}

错误信息解释:

age 等于 "24",不是合法的 int 类型。

name 是必须提供的,且没有指定默认值。

v.validated_data 是校验后合法的数据,例如:

{'age': 24, 'name': u'Michael', 'sex': 'f'}

下面是一些错误数据的例子:

data: {'age': 24, 'name': 'abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc', 'sex': 'f'}

is_valid: False

errors: {'name': 'string is too long, max-lenght is 50'}

validated_data: None

data: {'age': 24, 'name': 'Michael', 'sex': 'c'}

is_valid: False

errors: {'sex': "'c' not in the choices"}

validated_data: None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql android客户端,XSGManage: 学生成绩管理系统---客户端,基于Android+Django+sqlit3开发...

D:.├─.gradle //编译产生,可删除后打开├─.idea //编译产生,可删除后打开├─app //项目核心代码│ ├─build //构建产生,若报错可删除后打开│ ├─debug //运行时产生app的位置│ ├─libs //相关Java依赖包│ └─src│ ├─androidTe…

python发送qq邮件失败_Python实现给qq邮箱发送邮件的方法

#-*-coding:utf-8-*-## 导入smtplib和MIMEText#from email.mime.text import MIMETextimport smtplib## 要发给谁,这里发给2个人#mailto_list["naughty610qq.com","1034791200qq.com"]## 设置服务器,用户名、口令以及邮箱的后缀#mai…

android设备报警推送,Firebase推送通知未送达所有android设备

我正在使用PHP向特定的Android应用程序用户发送firebase推送通知。function enviar_push($token,$titulo,$subtitulo){define( API_ACCESS_KEY, AAA.....);// $registrationIds ;#prep the bundle$msg array(body > $subtitulo,title > $titulo,subtitle > );$field…

hana 表空间_oracle currentval

一个 lob 实例包含一个 locator 和 value。可以将...ALTER TABLE current_table MOVE PARTITION partition_...For every new extent created, Oracle generates ......日期时间函数的实现 Oracle采用SYSDATE作为取当前时间,而DB2中采用CURRENTTIMESTAMP...[n]; // 生产 DB2 UD…

vscode html中加css,[VScode教程] VSCode 支持CSS

VSCode 支持CSS,介绍两个比较实用的功能:取色器 Color Picker和CSS 选择器的预览。取色器 Color Picker首先,你可以在书写 HTML 和 CSS 时使用取色器。在书写 HTML 和 CSS 的时候,你可能经常需要修改元素的颜色。VS Code 为修改颜…

无限超越超级机器人nds_阿里重新定义个人电脑!仅名片大小,无限升级,不怕丢失无惧病毒,价格仅传统PC一半...

9月17日,阿里云智能总裁、达摩院院长张剑锋表示,过去10年,阿里云自研飞天云平台,造了一台“超级计算机”——云电脑“无影”。这是一台长在云上的“超级电脑”:在本地没有主机,没有电脑CPU和硬盘&#xff0…

php怎样传数据到html代码,传递数据到PHP文件与HTML模板

我怎么能加载文件table.php与我尝试通过的数据,当ajax调用made.Im与jquery.load方法trysing第二个参数是一个数据数组,但不起作用。传递数据到PHP文件与HTML模板这是一个基本的例子,我必须让我得到这个错误Notice: Undefined variable: field…

ios uiview 如何刷新_2020最新迅雷苹果版如何下载?

自iOS系统更新以后就用不了迅雷企业版,小伙伴们不要着急,iOS版迅雷失效是经常的事。现在为大家提供迅雷beta,迅雷内测,双版本,永久不失效!!!https://mp.weixin.qq.com/s/qoR_Dkl_TS7LHK_EYegsOw1.【此Beta版…

mrc20温控f1什么意思_温控器的“总、高、低”是什么意思?不知道?民熔老电工告诉你...

今天刘博士就来给大家讲讲温控仪,觉得有帮助的记得点赞加关注不迷路哦!温度控制器是一种常用的温度监控系统,如地暖热水器、空调烤箱等。温控器原理民熔温度控制器的原理也是温度控制器的控制原理。连接温度探头,温度探头测得的温…

鸿蒙系统支持华为哪几款手机,鸿蒙系统终于来了!这几款华为手机可以升级

就在6月2日晚8点,华为召开发布会,带来了鸿蒙HarmonyOS 2操作系统正式版。小优的心情,和大家一样激动!!!还记得第一次听说“鸿蒙”这个名字,是在2019年。当时美国禁止华为使用安卓系统&#xff0…

proxytable代理不生效_民法典房屋买卖合同卖方代签合同生效吗

现实社会中房产买卖双方需要签订一份协议,这个协议是很重要的,以免日后产生纠纷。所以签订合同的时候相关的事项需要注意,但是有的是属于代签合同,那么民法典房屋买卖合同卖方代签合同是否生效?下面由陈联睿律师进行详…

html 图片高度 页面高度自适应,怎样让网页图片高度自适应宽度

[摘要]你肯定知道width百分比可以实现图片宽度的自适应,那么你知道高度也可以根据宽度变话而自适应比变化么,看下本文就了解了!当前响应式布局,内容尺寸自适应设备是众多网站开发者的选择,毕竟现在显示器、笔记本、移动…

伦巴时间步的动作要领_军训动作要领已到,请签收

点击上方蓝字关注我吧军训动作要领已到,请签收小20的军训已经开始两天了!经过两天的辛苦训练,相信同学们已经对训练项目有所了解,但是要做到很好,还需要不断练习。趁着空闲时间,温习一下已学的提前熟悉一下…

subline3插件html,Sublime Text3与html的插件

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?因为学习web课程,需要一些环境来支持web的高效率开发,于是就将sublime text3进行进一步的优化,是他更适合html和css的编辑&…

小程序和vue语法对比_React语法开发微信小程序 Demo

前言从16年微信小程序内测的时候至今,微信小程序用实践证明了自己的创新和价值,微信小程序的规则也在社区的影响下变得更加完善。但是不得不说,用惯了VSCode,官方的开发工具确实不怎么好用。之前没有接触过小程序开发,…

计算机科学与技术mobi,080901-计算机科学和技术.PDF

080901-计算机科学与技术按照教育部计算机科学与技术教学指导委员会制定的《计算机科学与技术专业规范》要求,本专业的主要知识领域包括:离散结构、算法与复杂性、计算机体系结构与组织、操作系统、以网络为中心的计算、软件工程、程序设计语言、程序设计…

cookie 在线人数列表_前端学习随笔2 在线简历

​一 心得体会今天的任务是利用HTML制作一份在线简历,先不考虑样式,只从结构和语义化方面着手。对于已经有了前端b编程经验的我来说挺简单的,但是我还是当作我是一个刚入门的菜鸟,在学习过程中发现其实还有很多基础知识被我忽略了…

html表单传值,如何将用户输入的表单值从html传递给javascript?

通过将值写入标记,可以将值从javascript传递给html.但是,如果我希望将用户定义的值(等,由查看网页的人输入)传递给java脚本,以便我可以用它做什么,那么最简单的方法是什么?目前,我有这样的事情:如何将表单中的值传递给我的javascript?或者,我…

打开黑色_垃圾桶里的黑色塑料袋,打开一看,倒吸一口气!

江山多娇我和我的家乡 大直播明天很热注意防晒萍乡天气18—32℃晴来源 | 都市现场(jxtvdsxc)综合安徽公共频道非经允许请勿转载 如删除来源必究5月19号下午,在合肥市春晖园小区内,有两位老人竟偶然从小区垃圾桶内翻出了六万多元的现金。这是怎么回事…

计算机应用技术教程的答案,计算机应用技术教程第3章办公自动化答案

计算机应用技术教程参考答案答案:Word部分一、单选题1. 在Word中,如果在英文文章中出现红色波浪下划线,表示( )。A.单词拼写错 B.要全部小写 C.语法错 D.要全部大写2. 在Word中,如果…