Как вызвать функцию при нажатии кнопки POST на Django Rest Api - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть Django rest api, в который вы можете загрузить файл и идентификатор: Снимок экрана

Я хочу вызвать функцию, когда нажата кнопка отправки, чтобы сделать что-то сзагруженный файл.Как я могу сделать это на платформе отдыха django?

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.')

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Ответ:

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)
0 голосов
/ 21 сентября 2018

В URL добавьте шаблон

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

В вашем view.py

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

Когда вы вызываете функцию публикации, вы переходите к этому представлению.Вы можете выполнять свои задачи здесь.

...