0

我正在为我的 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

谢谢。

4

1 回答 1

1

您可以通过检查来做到这一点request.headers.get('referer')。里面应该有你的swagger网址。

于 2021-04-26T16:37:57.103 回答