Передача файлов изображений in_memory во внешний API по POST-запросу

Вот сценарий этого поста..... Пользователь отправляет несколько изображений в REST API, мне нужно получить эти изображения и отправить их во внешний API, чтобы получить оценки, вычисленные в AI Modal.

Я нашел много решений для отправки сохраненных изображений во внешний API, но не смог найти ничего, связанного с объектами в памяти, поэтому я размещаю свое решение здесь, чтобы в следующий раз кому-то было проще

import requests
from rest_framework.exceptions import ValidationError


def external_api(img):
    api_endpoint = 'YOUR_EXTERNAL_API'
    payload = {}
    files = [
        ('img', (img.get("img").name, img.get('img').file, img.get("img").content_type))
    ]
    headers = {}
    response = requests.request("POST", api_endpoint, headers=headers, data=payload, files=files)
    return response


#Serializer

class ScoreCardSerializer(serializers.ModelSerializer):
    score_data = serializers.JSONField(read_only=True, required=False)

    class Meta:
        model = ScoreCard
        exclude = ['card_display']

    def create(self, validated_data):
        score_image = validated_data.pop('score_card_image')
        ai_response = []
        for image in score_image:
            ai = external_api(image)
            if ai.status_code == 200:
                ai_response.append(ai.json())
            else:
                raise ValidationError("Server is overloaded. Please try again in few minutes")
        specie = ScoreCard.objects.create(**validated_data)
        for image in score_image:
            Images.objects.create(score_card_id=specie.id, img=image['img'])
        specie.score_data = ai_response
        specie.save()
        return specie
Вернуться на верх