本文正在参加「Python主题月」,详情查看 活动链接
微信公众号搜索【程序媛小庄】,Rest cannot be enjoyed by lazy people~
前言
在使用Django框架开发前后端分离的项目时,通常需要对前端传递过来的参数进行校验,校验的方式有多种,可以使用drf
进行校验,也可以使用json
进行校验,本文介绍在Python中rapidjson
的基本使用以及如何进行参数校验。
rapidjson简介和安装
rapidjson
是一个性能非常好的C++ JSON解析器和序列化库,它被包装成了Python3的扩展包,就是说在Python3中可以使用rapidjson
进行数据的序列化和反序列化操作并且可以对参数进行校验,非常方便好用。
rapidjson
安装命令:pip install python-rapidjson
。
rapidjson基本使用
rapidjson
和json
模块在基本使用方法上一致的,只不过rapidjson
在某些参数方面和json
模块不兼容,这些参数并不常用,这里不做过多介绍,详情可参照rapidjson
官方文档。基本使用介绍两个序列化的方法dump/dumps
,反序列化的load/loads
使用json
模块的即可。
dumps & dump
这两个方法都是将Python实例对象序列化为JSON格式的字符串,用法和参数大致相同,dump
方法比dumps
方法多了一个必要的file_like
参数。
dumps() 方法
该方法返回的结果是一个Python 字符串实例。参数非常多,这里只介绍经常使用的三个参数。
1 | python复制代码rapidjson.dumps(obj, *, skipkeys=False, ensure_ascii=True, write_mode=WM_COMPACT, indent=4, default=None, sort_keys=False, number_mode=None, datetime_mode=None, uuid_mode=None, bytes_mode=BM_UTF8, iterable_mode=IM_ANY_ITERABLE, mapping_mode=MM_ANY_MAPPING, allow_nan=True) |
skipkeys
该参数表示是否跳过不可用的字典的key
进行序列化,如果默认为False
,如果修改为True
字典的key
如果不属于基本数据类型(str int float bool None
)之一就会跳过该key
而不会抛出TypeError
的异常。
1 | python复制代码import rapidjson |
ensure_ascii
该参数表示序列化的结果是否只包含ASCII字符,默认值是True
,将Python实例序列化后所有的非ASCII码的字符都会被转义,如果将该参数的值修改为False
,增会将字符原样输出。
1 | python复制代码dic = { |
sort_keys
该参数表示序列化时是否将字典的key
按照字母进行排序。默认是False
,如果修改为True
,字典序列化得到的结果就是按照字典的key
的字母顺序进行排序的。
1 | python复制代码dic = { |
dump()方法
该方法和dumps
方法非常类似,不同的是该方法需要一个额外的必须的参数 - 一个file-like
的可写流式对象,比如文件对象,将第一个参数obj
进行序列化写入可写的流式对象中。
1 | python复制代码rapidjson.dump(obj, stream, *, skipkeys=False, ensure_ascii=True, write_mode=WM_COMPACT, indent=4, default=None, sort_keys=False, number_mode=None, datetime_mode=None, uuid_mode=None, bytes_mode=BM_UTF8, iterable_mode=IM_ANY_ITERABLE, mapping_mode=MM_ANY_MAPPING, chunk_size=65536, allow_nan=True) |
下面是该方法的基本使用:
1 | python复制代码# 写入文件 |
Validator class
rapidjson
中的Validator
类可以用来做参数校验。Validator
的参数是JSON schema
,当我们需要知道JSON数据中预期的字段以及值的表示方式时,这就是JSON Schema
的用武之地,是描述JSON数据结构的一种声明格式,也可以通俗的理解为是参数的校验规则。如果JSON schema
是不可用的JSON格式的数据,就会抛出JSONDecodeError
的异常。
类的参数就是校验规则,如果给定的JSON数据没有通过校验就会抛出ValidationError
异常,异常包括三个部分,分别是错误的类型、校验的规则以及在JSON字符串中错误出现的位置。
1 | python复制代码import rapidjson |
1 | python复制代码validate = rapidjson.Validator('{"type": "array",' # 参数类型是array |
关于JSON schema
的更多参数校验规则以及定义规范可以参考*JSON schema官方文档*,下述是一种JSON schema
格式仅供参考:
1 | json复制代码LOGIN_SCHEMA = { |
结语
文章首发于微信公众号程序媛小庄,同步于掘金。
码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)
本文转载自: 掘金