封装request.get_params批量取值
@json_request_validator(post_schema) 装饰器
from functools import wraps
from schema import SchemaError def json_request_validator(schema):
"""
***校验请求中携带的Json格式*** 1. 提取客户推送的数据,将其转化成json
2. 按照schema对json进行校验和转换, 未通过就抛出相应的异常, 异常参见
3. 添加get_params(\*params)方法, 用于批量获取转换后的json参数
4. 完成view的原有操作
"""
def decorator(func):
"""
装饰器
""" def inner_decorator(view, *args, **kwargs):
"""
**装饰器内部逻辑实现**
"""
try:
args_dict = json.loads(view.request.body.decode('utf-8'))
api_logger.info(args_dict)
except Exception:
return JsonResponse(dict(
msg='请传递Json格式的数据',
code=ARGUMENT_INVALID,
data={}
))
try:
args_dict = schema.validate(args_dict)
except SchemaError as ex:
return JsonResponse(dict(
msg=str(ex),
code=ARGUMENT_INVALID,
data={}
)) setattr(view.request, 'get_params',
lambda *arg_items: [args_dict.get(arg) for arg in arg_items]) return func(view, *args, **kwargs) return wraps(func)(inner_decorator)
return decorator
from schema import Schema, Use, Optional
class ProductView(APIView):
post_schema = Schema({
'barcode': Use(str, error='barcode required'),
'store_code': Use(str, error='store code required'),
'come_from': Use(str, error='from required'),
Optional('quantity'): Use(int, error="params quantity require int"),
Optional('user_id'): Use(int, error='params user id require int'),})
@json_request_validator(post_schema)
def post(self, request):
barcode, store_code, come_from, quantity, user_id = request.get_params('barcode', 'store_code', 'come_from', 'quantity', 'user_id')
封装request.get_params批量取值的更多相关文章
- CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
昨夜园子猴子问了几个我CYQ.Data使用的小问题,经过简单解答后,他表示“妈妈再也不用担心我的学习",并于事后以资鼓励,希望这框架越走越好. 除了技术上的交流,双方在生活,S上面的问题上也 ...
- ASP.NET中多个相同name的控件在后台正确取值
有兽, 页面上可能有多个相同name的Html表单控件, 一般在后台使用Request.Form[“name”]取值,并用‘,’分隔. 但是当值中包含逗号时, 取值就会出现异常, ...
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- Jmeter的JDBC Request,sql参数化及返回值取值
1.JDBC Request面板 Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字 ...
- chrome 和IE 上传的文件,在net 后台取值Request.Form.Files[0].FileName 的不同
chrome 和IE 上传的文件,在net 后台取值Request.Form.Files[0].FileName 的不同 chrome 获得的是不含路径的纯文件名 IE获得的是含路径的文件名
- request.getParameter(“xxx”)的参数的取值
request.getParameter(“xxx”)的参数的取值的几种可能: 1. Html中form表单中标签的name属性: <form name="form" met ...
- 使用 NodeJS + Express 從 GET/POST Request 取值 -摘自网络
過去無論哪一種網站應用程式的開發語言,初學者教學中第一次會提到的起手式,八九不離十就是 GET/POST Request 的取值.但是,在 Node.js + Express 的世界中,彷彿人人是高手 ...
- spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...
- 使用 NodeJS + Express从GET/POST Request 取值
过去无论哪一种网站应用程式的开发语言,初学者教学中第一次会提到的起手式,八九不离十就是GET/POST Request 的取值.但是,在Node.js + Express 的世界中,仿佛人人是高手,天 ...
随机推荐
- NoSQL v.s. RDB
RDB 相对于 NoSQL 的劣势: 1. 集中式单点架构 2. 固定的数据模型: 可扩展性差,缺乏处理半结构化和非结构化数据的能力. 3. 扩容成本高:处理海量数据时存在性能瓶颈,大数据时代的存储需 ...
- 遍历并批量删除容器中元素出现ConcurrentModificationException原因及处置
在以下四种遍历过程中,前两种会抛出ConcurrentModificationException,而后两种方法是正确的. Department类: package com.sitinspring; i ...
- node的socket.io的之事件篇
socket.io类库不但可以相互发送消息,而且还可以通过socket端口对象的emit方法互相发送事件. emit在之前的事件上说过现在一句话带过:emit是用来手动触发事件的. socket.em ...
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
证券代码 证券简称 大股东持股比例 [日期] 最新 [大股东排名] 第1名 [单位] % 总市值2 [交易日期] 最新收盘日 [单位] 亿元 000004.SZ 国农科技 28.4200 23.261 ...
- Python Twisted系列教程22:结束
作者:dave@http://krondo.com/part-22-the-end/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“ ...
- Vue.js+Koa2移动电商 笔记
一.搭建项目架构: 项目采用Webpack+Vue-router的架构方式,开始安装(基于windows系统) 1.按Win+R,然后在文本框中输入cmd,回车打开命令行,输入vue-cli安装命令: ...
- 关于jquery.noConflict()的学习记录
今天无意中看到了jquery.noConfict()的实现方法 代码如下: var // Map over jQuery in case of overwrite _jQuery = window.j ...
- Spring Test 整合 JUnit 4 使用总结
转自:https://blog.csdn.net/hgffhh/article/details/83712924 这两天做Web开发,发现通过spring进行对象管理之后,做测试变得复杂了.因为所有的 ...
- DDD-EF-数据仓储
关系图 一.分层 二.DomainObjects构建edmx 三.EFRepositoryDemo.Domain定义仓储接口 public interface IRepository<T> ...
- 使用JavaScript调用aspx后台代码
方法1:js同步调用 触发: onclick="javascript:share('<%# Eval("id_File") %>')" 页面函数: ...