django - 如何使用 Django Rest Framework 为每个请求设置upload_handlers
问题描述
我有一个 DRF 视图,我需要确保上传的文件落在文件系统上,而不仅仅是在内存中。DRF 尊重 Django 的FILE_UPLOAD_HANDLERS
设置,但我不想为我的整个应用程序更改它,只是这个视图。
我知道在常规的 Django 视图中我可以设置request.upload_handlers
为我想要的值,但这似乎在 DRF 中不起作用。我试过.initialize_request()
在我的视图中这样做,如下所示:
def initialize_request(self, request, *args, **kwargs):
request.upload_handlers = ["django.core.files.uploadhandler.TemporaryFileUploadHandler"]
return super().initialize_request(request, *args, **kwargs)
但我得到:
AttributeError: You cannot set the upload handlers after the upload has been processed.
我为单个 DRF 视图(特别create
是通用视图集的操作)设置上传处理程序的正确方法是什么?
解决方案
似乎您没有以正确的方式分配上传处理程序
from django.core.files.uploadhandler import TemporaryFileUploadHandler
from rest_framework import viewsets
class MyUploadViewSet(viewsets.ModelViewSet):
# your view class attributes goes here....
def initialize_request(self, request, *args, **kwargs):
request.upload_handlers = [TemporaryFileUploadHandler(request)] # initialization goes here
return super().initialize_request(request, *args, **kwargs)
笔记
这将在所有基于 DRF 类的视图中按原样工作
推荐阅读
- python - 在 python 中是否有一种获取 XML 内部子集的好方法?
- php - 我无法使用这组代码访问数据库。使用 PDO 和另一种方法,他们不访问 config.php
- android - 混淆后的Android类规范名称唯一性
- java - Oracle JDK 11 和 JDK 12 字体渲染区别
- docker - 在 docker run 中明确指定交互
- xamarin.forms - 如何检测是否在 xamarin 表单中单击了播放按钮
- c# - 下拉悬停在所有下拉菜单的相同位置显示 div 或模态
- swift - 在 SceneKit 中展开立方体
- azure - 是否可以通过 Azure devops API 获取提交评论列表?
- facebook - 脸书上被屏蔽的网址