【发布时间】:2020-03-25 18:54:37
【问题描述】:
我正在尝试构建一个将 XML 文件数据返回给客户端的简单 API。我正在使用 Django 3.0.4 和 Django Rest Framework 3.11.0,并且我的大部分工作都基于本教程https://www.django-rest-framework.org/tutorial/1-serialization/
这是我的模型:
从 django.db 导入模型
class File(models.Model):
file = models.FileField(blank=False, null=False)
device = models.CharField(max_length=20, primary_key=True)
class Meta:
verbose_name_plural = "API"
def __str__(self):
return self.file.name
这是观点:
from django.shortcuts import render
from rest_framework.parsers import FileUploadParser
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from .serializers import FileSerializer
from .models import File
class FileList(APIView):
"""
List all files, or create a new file.
"""
def post(self, request, format=None):
serializer = FileSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request, format=None):
files = File.objects.all()
serializer = FileSerializer(files, many=True)
return Response(serializer.data)
class FileDetail(APIView):
"""
Retrieve, update or delete a file instance.
"""
def get(self, request, pk, format=None):
file = File.objects.get(pk=pk)
serializer = FileSerializer(file)
return Response(serializer.data)
这是应用网址:
from django.urls import path
from .views import FileList
from .views import FileDetail
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('<str:pk>', FileDetail.as_view()),
path('', FileList.as_view()),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我在设置中有这个:
STATIC_URL = '/static/'
MEDIA_URL = '/path/to/file:devices/'
MEDIA_ROOT = os.path.join(BASE_DIR, "path/to/file:devices")
一切正常,我没有看到任何错误。我可以使用 Postman 发布文件和获取文件(作为列表或作为单个文件,基于 pk)。 我遇到的问题是,当我获取一个单独的文件时,我得到了这个:
{
"file": "/path/to/file:devices/example.xml",
"device": "example.xml"
}
我希望响应是文件内容(实际 XML 数据)而不是文件的 URL。 任何想法将不胜感激。
【问题讨论】:
标签: django django-rest-framework