本文主要内容:
1.使用cgi构造简单的get接口,post类型接口,返回数据均为json格式
2.几个主要方法
environ['REQUEST_METHOD'] :请求类型,GET或POST
environ["wsgi.input"].read(content_length):读取post请求参数
environ['PATH_INFO']:请求参数
3.使用dataframe的to_json直接生成json文件并作为请求结果返回,
orient参数为生成json的格式:如index,columns,table,value等,
需要在源码hanlers.py文件加一行代码 data=data.encode(),转换为byte,不然会报错
data=data.encode()
assert type(data) is bytes, \
"write() argument must be a bytes instance"
import json
from urllib.parse import parse_qs
from wsgiref.simple_server import make_server
import pandas as pd
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/json')])
if environ['REQUEST_METHOD']=='POST':
if environ['PATH_INFO'][1:]=='getdata':
# 读取请求参数
content_length=int(environ.get("CONTENT_LENGTH", 0))
request_body = environ["wsgi.input"].read(content_length)
request_body = json.loads(request_body)
filename = request_body["filename"] # filename为请求的文件名
show_type = request_body["show_type"] # show_type为转换json的origin参数
# 读取excel
df = pd.read_excel('{}.xlsx'.format(filename))
#生成json
jsons = df.to_json(orient=show_type)
return jsons
elif environ['PATH_INFO'][1:]=='test': #如果请求方法为test,则返回固定数据
return json.dumps({"type":"test","code":200})
else: # 处理get请求
params = parse_qs(environ['QUERY_STRING'])
name = params.get('filename', [''])[0]
types = params.get('show_type', [''])[0]
df = pd.read_excel('{}.xlsx'.format(name))
jsons=df.to_json(orient=types)
return jsons
if __name__ == "__main__":
port = 8888
httpd = make_server("0.0.0.0", port, application)
httpd.serve_forever()
运行,使用postman访问接口
image.png image.pngget请求
image.png
网友评论