我正在为我的 API 使用Django-Rest-Framework。我正在使用drf_yasg记录该 API 。我的一个观点返回一个 Django FileResponse
。
当我直接在“http://localhost:8000/api/my_documents/1”访问视图时,它成功显示(PDF)文件。但是当我通过 swagger 访问它时,它成功返回 200 但给出以下消息:
无法识别的响应类型;将内容显示为文本。
这是大摇大摆本身的问题的b / c 。正如该票证中所建议的,如果我将“Content-Disposition”响应标头从“inline”更改为“attachment”,问题就会消失。但是,我不想总是下载文件。
我的问题是:我可以确定请求是否是由视图中的 swagger 发出的并有条件地更改标头吗?就像是:
class MyDocumentView(GenericAPIVIew):
def get(self, request, pk):
my_document = MyDocument.objects.get(pk=pk)
response = FileResponse(my_document.file) # (file is a FileField)
# WHAT DO I PUT HERE ?!?
if request.is_from_swagger:
response.headers["Content-Disposition"] = response.headers["Content-Disposition"].replace("inline", "attachment")
return response
谢谢。