Django rest框架:在解析器之前拒绝上载

Django rest框架:在解析器之前拒绝上载,django,http,file-upload,django-rest-framework,Django,Http,File Upload,Django Rest Framework,我有一个用Django REST框架指定的Django应用程序的上传API 来自rest\u框架导入视图的 类MyUploadView(views.APIView): 权限\u类=( CanUploadFilePermission, ) parser_classes=(parsers.FileUploadParser,) 我注意到只有在文件已经被FileUploadParser上传/处理之后,权限才会被检查 不幸的是,我在执行堆栈的Django REST框架中找不到API调用的任何信息。所以我

我有一个用Django REST框架指定的Django应用程序的上传API

来自rest\u框架导入视图的

类MyUploadView(views.APIView):
权限\u类=(
CanUploadFilePermission,
)
parser_classes=(parsers.FileUploadParser,)
我注意到只有在文件已经被
FileUploadParser
上传/处理之后,权限才会被检查

不幸的是,我在执行堆栈的Django REST框架中找不到API调用的任何信息。所以我甚至不知道哪些部分(解析器、权限、身份验证等)是按什么顺序执行的

FileUploadParser
甚至将整个文件读入缓冲区之前,是否可以拒绝文件上载?
我的目标还在于根据用户权限限制文件上载大小,并在服务器开始将HTTP
内容长度写入缓冲区之前,如果HTTP
头大于某个用户允许的长度,则拒绝请求。

检查
APIView
类。请求从
dispatch
方法开始,从那里可以看到调用堆栈。俗话说,代码是最好的文档。我发现这对DRF尤其适用,尤其是如果你想了解底层细节的话

现在,如果您检查
restframework.requests.Request
类,您将看到只有在访问
Request.files
Request.data
时,才会延迟加载请求数据和文件。因此,您需要做的是确保在检查权限之前不会访问这些属性


从我在DRF视图和视图集中看到的情况来看,在选中权限之前,不会访问这些属性,因此默认情况下,您想要的似乎已经实现了。您可以向
内容类型
标题添加自定义权限,并授权用户上传,如您所述。

这非常有用,谢谢!另外,一般建议如何使用Django rest框架。我对文档非常失望,使用代码作为文档可能是最好的选择。我刚刚检查了Request类,您是对的,似乎是在懒洋洋地加载。我将尝试作为权限的一部分访问标题字段是否有帮助