drf结合rest-pandas实现下载excel文件
drf结合rest-pandas实现下载excel文件
下载rest-pandas
pip install rest-pandas
使用方法
在views.py文件中
from rest_pandas.views import PandasViewBase
from rest_pandas.renderers import PandasExcelRenderer
class TestExcelRenderer(PandasExcelRenderer):
format = "xlsx" # 还可以为xlsx 该参数决定了下载的文件格式,默认不写为csv
def get_pandas_kwargs(self, data, renderer_context):
return {"index": False} # 看下面注意事项
class TestExcelFile(PandasViewBase, ListAPIView):
serializer_class = TestExcelFileSerializer
queryset = Book.objects
renderer_classes = [TestExcelRenderer, ]
def get_pandas_filename(self, request, format): # 该方法决定下载的文件名
return "Test Excel File"
def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
return self.update_pandas_headers(response) # 必须把response传入该方法,不然名字无效
在serializers.py文件中
class TestExcelFileSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = "__all__"
打开下载文件
注意事项
- 关于get_pandas_kwargs方法里{"index": False},如果是False, 那么在下载的时候不会带索引,如果为Ture,那么会多出一列索引列,如下图所示
-
不重写get_pandas_filename方法那么文件名就默认为response
-
要调用update_pandas_headers方法返回数据,不然get_pandas_filename不会生效
-
renderer_classes参数如果不指定,那么默认的效果就是不会加粗的字体,如下图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2021-11-17 python函数装饰器