美文网首页python之路
cgi创建http接口并返回json数据

cgi创建http接口并返回json数据

作者: 非鱼2018 | 来源:发表于2020-06-13 00:46 被阅读0次

本文主要内容:

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.png

get请求


image.png

相关文章

网友评论

    本文标题:cgi创建http接口并返回json数据

    本文链接:https://www.haomeiwen.com/subject/pkycnhtx.html