簡體   English   中英

通過django restful api上傳文件

[英]Upload file through django restful api

我已經閱讀了所有的stackoverflow問題和答案以及我找到的每個教程,但我仍然無法使其工作 - 我可能會愚蠢。 我正在嘗試通過curl通過restful api將文件上傳到django。 我的curl命令如下

curl -X POST -H "Content-Type:multipart/form-data" -u alex:password123 -F "docfile=@/Users/Alex/test.txt" http://127.0.0.1:8000/files/

models.py

from django.db import models

class File(models.Model):

     title = models.CharField(max_length=100, default='')
     docfile = models.FileField(upload_to='file/')

views.py

from rest_framework.parsers import FormParser, MultiPartParser
from models import File
from serializers import FileSerializer

class UploadFile(viewsets.ModelViewSet):
     queryset = File.objects.all()
     serializer_class = FileSerializer
     parser_classes = (MultiPartParser, FormParser,)


     def preform_create(self, serializer):
          file_obj = self.request.FILES['docfile'] 
          serializer.save(file_obj)

serializers.py

from rest_framework import serializers
from models import File

class FileSerializer(serializers.HyperlinkedModelSerializer):

     class Meta:
         model = File
         fields = ('docfile','name')

urls.py

from django.conf.urls import url, include
from rest_framework import routers
from quickstart import views

router = routers.DefaultRouter()
router.register(r'files', views.UploadFile)

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

我的媒體根源是MEDIA_ROOT = ''我已經閱讀了大量的文檔,但我真的被困在所有這些如何融合在一起/我缺少什么。 任何幫助表示贊賞。

REST API的一個優點是它帶有大量的類來減少你必須為常見操作編寫的代碼,但是如果你是API的新手並且你將通過curl上傳文件,那么你應該從更簡單的東西開始:

class UploadFile(views.APIView):
    parser_classes = (parsers.FormParser, parsers.MultiPartParser)

    def post(self, request):
        if len(request.FILES) > 0:
            request_file = request.FILES[0]
            file = File(docfile=request_file, title='something')
            file.save()
        else:
           # do something

urls.py:

url(r'^files/$', views.UploadFile.as_view(), name='files'),

掌握了API提供的不同視圖后,您可以嘗試使用viewsets.ViewSet 我個人更喜歡從views.APIView擴展我的視圖, views.APIView代碼有更多的控制權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM