我可以根据是否从 swagger 调用视图来 return 不同的 Django 响应吗?
Can I return a different Django Response based on whether or not the view is invoked from swagger?
我正在为我的 API 使用 Django-Rest-Framework。我正在记录 API w/ swagger using drf_yasg。我的观点之一 returns Django FileResponse
.
当我直接在“http://localhost:8000/api/my_documents/1”访问视图时,它成功显示了 (PDF) 文件。但是当我通过 swagger 访问它时它成功 returns a 200 但给出以下消息:
Unrecognized response type; displaying content as text.
这是 b/c of this issue in swagger 本身。正如该票证中所建议的,如果我将“Content-Disposition”响应 header 从“内联”更改为“附件”,问题就会消失。但是,我不想总是下载文件。
我的问题是:我能否在视图中判断请求是否由 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
url。
我正在为我的 API 使用 Django-Rest-Framework。我正在记录 API w/ swagger using drf_yasg。我的观点之一 returns Django FileResponse
.
当我直接在“http://localhost:8000/api/my_documents/1”访问视图时,它成功显示了 (PDF) 文件。但是当我通过 swagger 访问它时它成功 returns a 200 但给出以下消息:
Unrecognized response type; displaying content as text.
这是 b/c of this issue in swagger 本身。正如该票证中所建议的,如果我将“Content-Disposition”响应 header 从“内联”更改为“附件”,问题就会消失。但是,我不想总是下载文件。
我的问题是:我能否在视图中判断请求是否由 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
url。