问题描述
我的 API 使用 Django-Rest-Framework。我正在使用 drf_yasg 用 swagger 记录该 API。我的一个视图返回一个 Django FileResponse
。
当我直接在“http://localhost:8000/api/my_documents/1”访问视图时,它成功显示了(PDF)文件。但是当我通过 swagger 访问它时,它成功返回了 200 但给出了以下消息:
这是 this issue 的 b/c 本身。正如那张票中所建议的那样,如果我将“Content-disposition”响应标头从“inline”更改为“attachment”,问题就会消失。但是,我不想总是下载文件。
我的问题是:我可以在视图中判断请求是否是swagger发出的并有条件地改变headers吗?类似的东西:
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
谢谢。
解决方法
您可以通过选中 request.headers.get('referer')
来执行此操作。那里应该有您的 swagger
网址。