1

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

curl -X POST -H "Content-Type:multipart/form-data" -u alex:password123 -F "[email protected]/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 = ''我已經通過一噸的文件讀取,但我真的停留在這一切是如何結合在一起的/我錯過了什麼。任何幫助表示讚賞。

回答

0

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擴展我的觀點,並對代碼有更多的控制權。