【问题标题】:How to set upload_handlers on a per-request basis using Django Rest Framework如何使用 Django Rest Framework 为每个请求设置upload_handlers
【发布时间】:2020-11-05 01:44:01
【问题描述】:

我有一个 DRF 视图,我需要确保上传的文件位于文件系统上,而不仅仅是在内存中。 DRF respects Django's FILE_UPLOAD_HANDLERS setting,但我不想为我的整个应用程序更改它,只是这一个视图。

我知道在常规的 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 操作)设置上传处理程序的正确方法是什么?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您似乎没有以正确的方式

    分配上传处理​​程序
    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 类的视图中按原样工作

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 2018-04-15
      • 1970-01-01
      • 2015-05-18
      • 2017-06-28
      • 2023-03-25
      • 2016-09-04
      • 2019-11-22
      • 2015-06-02
      相关资源
      最近更新 更多