有没有办法使用 Django REST 框架中的可浏览 API 上传文件?
Posted
技术标签:
【中文标题】有没有办法使用 Django REST 框架中的可浏览 API 上传文件?【英文标题】:Is there a way to upload files using the browsable API in Django REST framework? 【发布时间】:2015-11-25 12:04:18 【问题描述】:我需要测试一个上传文件的 API。如何从可浏览的 API 执行此操作。可浏览的 API 页面如下所示:
有没有办法使用这个接口上传文件?
views.py
:
class TrainingData(APIView):
"""
API for getting the training data
"""
def post(self, request, format=None):
"""
Receives the data in the form of a POST request
"""
print request.data
serialized = TrainingSerializer(data=request.data)
if serialized.is_valid():
file_obj = request.data['file']
print "its working"
return Response(status=204)
return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py
:
class TrainingSerializer(serializers.Serializer):
"""
Serializer for the training data input
"""
uploaded_file = serializers.FileField(use_url=settings.BASE_DIR+"/api/uploaded_files/")
【问题讨论】:
使用模型序列化器 这并没有改变任何东西。可浏览的 API 页面仍然与问题中的图片相同。 我使用了 Generic Based 视图,效果很好! 【参考方案1】:仅当使用基于通用的视图时,Django REST 框架才会在可浏览的 API 中自动生成适当的表单。切换到基于通用的视图解决了我的问题。
使用以下更改,我能够获得文件上传字段
from rest_framework import generics
class TrainingData(generics.CreateAPIView):
"API for getting the training data"
serializer_class = TrainingSerializer
【讨论】:
以上是关于有没有办法使用 Django REST 框架中的可浏览 API 上传文件?的主要内容,如果未能解决你的问题,请参考以下文章
Django-rest-framework 中的全局异常处理
如何在 Django REST 框架可浏览 API 中发送标头
Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?