Можно ли отправить запрос к 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
).
Адаптируйте ее в соответствии с вашими потребностями.