python flask request params
来源:互联网 发布:Ubuntu chrome设置中文 编辑:程序博客网 时间:2024/05/16 02:33
发现flask获取request参数有些不方便,没有像rails的params这样的东西,找了下github,发现有人写了这样的一个助手类,在此基础上改了下,代码如下
#coding=utf-8from __future__ import with_statementfrom functools import reducefrom flask import requestclass ParamRequiredError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value)class Params(object): def __init__(self, base_params=None, is_parse=True): self._params = base_params or {} if is_parse: # request.args : A MultiDict with the parsed contents of the query string self.__init_args(request.args) if request.view_args is not None: self.__setup_args(request.view_args) # request.json : If the mimetype is application/json this will contain the parsed JSON data. Otherwise this will be None. if request.json: self.__setup_args(request.json) else: if request.files: self.__setup_args(request.files) self.__setup_body(request.form.items(multi=True)) def __init_args(self, args): for k, v in args._iter_hashitems(): if isinstance(v, list) and len(v) == 1: self._params[k] = v[0] else: self._params[k] = v def __setup_args(self, args): self._params.update(args) def __setup_body(self, items): queries = [] for k, v in items: keys = self._parse_keys(k) queries.append(reduce(lambda res, key: {key: res} if key != '' else [res], reversed(keys), v)) [self.__setup_params(params) for params in queries] def params(self): return self._params def __setup_params(self, other): def deep_merge(a, b): for k, v in b.items(): if isinstance(v, dict) and k in a: deep_merge(a[k], v) elif isinstance(v, list) and k in a and isinstance(a[k], list): a[k].extend(v) else: a[k] = v deep_merge(self._params, other) def __getattr__(self, item): return getattr(self._params, item) def __getitem__(self, item): return self._params[item] def param_required(self, key): if key not in self._params: raise ParamRequiredError(key) return Params(self._params[key], is_parse=False) def require(self,*keys): for key in keys: if key not in self._params: raise ParamRequiredError(key) if not self._params[key]: raise ParamRequiredError(key) return Params(self._params, is_parse=False) def permit(self, *args): params = dict() for k in args: if k in self._params: if self._params[k]: params[k] = self._params[k] return Params(params, is_parse=False) @classmethod def _parse_keys(cls, keys): if '[' in keys or ']' in keys: return keys.replace(']', '').split('[') else: return [keys]def get_request_params(base_params=None): if not hasattr(request, '_request_params'): setattr(request, '_request_params', Params(base_params)) return getattr(request, '_request_params')def bind_request_params(attr_name='params'): setattr(request, attr_name, get_request_params())
使用
1、@app.before_request(bind_request_params)
2、@app.errorhandler(ParamRequiredError)
def param_required(error):
return error_with_msg("参数 %s 缺少或者为空 " % (error.value))
3、username = request.params.require('username').get('username')
1 0
- python flask request params
- python flask mysql request 实例
- Python Flask的Request中断和errorHandler
- Request、Request.Querystring、Request.From、Request.params
- 细说 Request[]与Request.Params[]
- Request.Item和Request.Params
- 细说 Request[]与Request.Params[]
- Request.Item和Request.Params
- 细说 Request[]与Request.Params[]
- Request.Params用法
- C# Request.Params
- Request.Params用法
- Cookie和Request.Params[""]
- Request.Params["id"]
- Request.Params用法
- 关于Request.params[转]
- Request.Params用法
- request.params 用法
- size_t类型
- java 学习笔记2
- Android开发中如何结束所有的activity
- HDU Problem 1873 看病要排队 【优先队列】
- select函数详细解读
- python flask request params
- python 学习(十一)之字符串2
- lintcode binary-tree-maximum-path-sum 二叉树中的最大路径和
- UI基础_自定义非等高Cell_Xib封装_版本_有GIF_源代码
- framework service
- pdo 转utf8
- OpenJudge 百练 2016 ACM 暑期课练习题 Charm Bracelet
- [16-7-26]每日总结
- HDU5754 多校联合3 人生赢家Bo