如何在 Django Rest API 上按下 POST 按钮时调用函数



我有一个Django rest api,你可以上传一个文件和一个id: 截图

我想在按下发布按钮时调用一个函数,以便对上传的文件做一些事情。如何在 django rest 平台中执行此操作?

models.py

from django.db import models
from .validators import validate_file_extension

class Uplist(models.Model):
report_id = models.CharField(max_length=200, primary_key= True)
application = models.FileField(blank=False, null=False, validators=[validate_file_extension])

serializers.py

from rest_framework import serializers
from api import models

class UplistSerializer(serializers.ModelSerializer):
class Meta:
model = models.Uplist
fields = ('application', 'report_id',)

urls.py

from django.urls import path
from django.conf.urls import url
from . import views
urlpatterns = [
path('', views.ListUps.as_view()),
url(r'^$', views.ListUps.as_view()),
url(r'^(?P<pk>[0-9]+)/$', views.ListDetails.as_view()),
]

views.py

from rest_framework import generics
from rest_framework.parsers import MultiPartParser, FormParser
from api import models
from . import serializers

class ListUps(generics.ListCreateAPIView):
parser_classes = (MultiPartParser, FormParser)
queryset = models.Uplist.objects.all()
serializer_class = serializers.UplistSerializer
class ListDetails(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Uplist.objects.all()
serializer_class = serializers.UplistSerializer

validators.py

def validate_file_extension(value):
import os
from django.core.exceptions import ValidationError
ext = os.path.splitext(value.name)[1]  # [0] returns path+filename
valid_extensions = ['.csv']
if not ext.lower() in valid_extensions:
raise ValidationError(u'Unsupported file extension.')

在网址中添加模式

path('someurl', SomeClass.as_view()),

在你的 view.py

class SomeClass(generics.ListCreateAPIView):
def post(self, request, **kwargs):
....

当你调用post函数时,你转到这个视图。您可以在此处执行任务。

答案:

class ListUps(generics.ListCreateAPIView):
parser_classes = (MultiPartParser, FormParser)
queryset = models.Uplist.objects.all()
serializer_class = serializers.UplistSerializer
def post(self, request, *args, **kwargs):
#added function here    
return self.create(request, *args, **kwargs)

最新更新