测试开发进阶(三十六)
项目模块
list优化
1 | def list(self, request, *args, **kwargs): |
这个list
其实就是拷贝了父类中的list
方法
使用
1 | super().list(request, *args, **kwargs) |
调用父类的list
方法
查看返回的Response
对象
所以优化为:
1 | def list(self, request, *args, **kwargs): |
重写get_serializer_class
names
中的serializer
使用serializers.ProjectNameSerializer
为了让它可以直接使用self.get_serializer
方法,重写get_serializer_class
源码
1 | def get_serializer_class(self): |
重写
1 | def get_serializer_class(self): |
报告模块
序列化器
1 | from datetime import datetime |
从数据库中可以看出其中html
是一串字符串,它需要转换成html格式才可以正常展示,所以在接口返回的内容中不应该包含它,设置它为只写模式write_only
对create
函数进行重定义
下面是数据库中显示的内容
1 | name = models.CharField('报告名称', max_length=200, unique=True, help_text='报告名称') |
查看models
文件可以看到name
字段是唯一的「unique=True
」所以我们在添加的时候需要携带上当前的时间信息
视图
定义一个类ReportsViewSet
还是继承ModelViewSet
其他和之前的类似
其中要注意的是一个download
接口
1 | import re |
每次下载之后我们都会在本地存放一次,然后我们需要以数据流的方式返回html报告
1 | response = StreamingHttpResponse(get_file_contents(report_path)) |
1 | def get_file_contents(filename, chunk_size=512): |
这里用到了分段的方式,每512字节返回一次,直到全部返回完毕