Можно ли отправить запрос к django rest api для запуска скрипта?

Я установил Django и Django Rest Api. Я хочу отправить некоторые данные в Rest Api. Rest api примет данные, выполнит скрипт с этими данными и получит результат. Затем отправлять этот результат обратно мне. При этом не будет использоваться база данных

Например, запрос : http://testerapi.com:8000/search?q=title:xfaster564CertVal9body:A%22&fl=id. Ответ : {validation : true}

Возможно ли это?

Да, это возможно! Но я постараюсь ответить с помощью api function based view.

Предположим, что наша рабочая функция, вызываемая при вызове API (GET или POST), находится в файле utilities.py, файлах models.py, serializers.py и views.py.

utilities.py

def my_worker(a, b=0, c=0):
    # do something with a, b, c
    return a + b + c > 10

models.py

from datetime import datetime
class User(object):
    def __init__(self, email, name, created = None):
        self.email = email
        self.name = name
        self.created = created or datetime.now()

serializers.py Я использую простой Serializer, но ModelSerializer лучше, я думаю

from rest_framework import serializers

class UserSerializer(serializers.Serializer):
    # initialize fields
    email = serializers.EmailField()
    name = serializers.CharField(max_length = 200)
    created = serializers.DateTimeField()

views.py

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt # Allow request without csrf_token set
from rest_framework.decorators import api_view

from .models import User
from .serializers import UserSerializer
# Import my_worker from .utilities
from .utilities import my_worker

@csrf_exempt
@api_view('GET')  # Only get request is allowed
def user_worker(request, a, b, c):
    """
    Do something with 
    """
    if request.method == 'GET':
        # Do some stuff
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        # Call the utilities script here
        result = my_worker(a, b, c)
        if result:  # a+b+c > 10
            return JsonResponse({"validation": "true"}, safe=False)
        else:
            return JsonResponse({"validation": "false"}, safe=False)

Обратите внимание, что я не использую UserSerializer, а показываю его на примере. Затем вы можете выполнить более сложную функцию (здесь my_worker). Адаптируйте ее в соответствии с вашими потребностями.

Вернуться на верх