is_parse_post: 是否解析请求中 post body 中的参数,默认值:True
post_len = wsgienv.get("CONTENT_LENGTH")
wsgienv["wsgi.input"].read(post_len)
is_encode_response: 是否重新拼装 response,并自动转为 json, 默认值:False
如:
retstat.OK, {"randstr": randstr}, [(__info__, __version__)]
|
V
HTTP_CODE:200
HTTP_BODY:{"stat":"OK","randstr":randstr}
HTTP_HEADERS: (info, version)
定义 handlers.x 开头的设置 is_parse_post, is_encode_response 为 True,True, 其他为 True,False
def autoload_handler(self, package_dir):
"""自动加载指定目录下的所有 package
Args:
package_dir: package dir
"""
# 将 "handlers" 目录下的 package 自动加载,也就是 __init__.py
results = import_submodules(package_dir)
for package_name in results:
# 如果 package_name 是以 {package_dir}.x 开头,则说明为简易接口函数
if package_name.startswith("{package_dir}.x".format(package_dir=package_dir)):
adder_args = [True, True]
else:
adder_args = [True, False]
self.add_apis(
results[package_name],
adder_args,
package_name=package_name)
# 解析 body 中的 json,并转为字典,以参数传给 handler 方法
## (1) 假如 body 中的内容不是 json,会报 {"stat": "ERR_BAD_PARAMS"} 错误
## (2) http 请求 URL 中的 get 请求参数和post 中 body 中的数据会同时生效
is_parse_post: True
# 是否将 handler 方法中返回的 dict 序列化为 json,并使用 utf-8 编码
is_encode_response: True
# 仅仅将请求 URL 中的 get 请求参数转为 handler 中的参数
is_parse_post: False
is_encode_response: True
is_parse_post: True
is_encode_response: False
from xlib.middleware import funcattr
@funcattr.api
def ping(req):
...