我们通过python用接口的方式导入/导出一份Excel文件。

Tornado 是一个 Python 网络框架和异步网络库,最初由 FriendFeed 开发。通过使用非阻塞网络 I/O,Tornado 可以扩展到数以万计的开放连接,使其成为 长轮询WebSockets 和其他需要与每个用户建立长期连接的应用程序的理想选择 。

利用tornado框架简单实现文件下载和导入文件的功能

import json
import time
import tornado.web
import pandas as pd
import tornado.ioloop
from io import BytesIO


def excel_writer(data_info_df):
    # 生成一个空ExcelWriter对象
    out = BytesIO()
    writer = pd.ExcelWriter(out, engine='xlsxwriter')
    # 写入数据
    data_info_df.to_excel(excel_writer=writer, index=False)
    # 保存数据
    writer.save()
    return out


class Download(tornado.web.RequestHandler):
    def get(self):
        # 创建测试对象
        excel_output = excel_writer(pd.DataFrame(columns=["测试"])).getvalue()
        # 文件名称
        excel_name = "c.xlsx"
        # 设置头信息
        self.set_header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        self.set_header('Content-Disposition', 'attachment; filename=' + excel_name)
        # 写入对象
        self.write(excel_output)

    def post(self, *args, **kwargs):
        # 获取参数
        file = self.request.files.get("Excel")[0].body
        # django 获取文件参数 request.data.get("Excel").file.getvalue()
        # 将参数解析为 df 格式
        file_df = pd.read_excel(file)
        # 返回为json格式
        self.write(json.dumps(file_df.to_dict("records"), ensure_ascii=False))


def make_app():
    return tornado.web.Application([
        (r"/", Download),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

注:这个例子没有使用 Tornado 的任何异步特性