Как отправить изображения в виде двоичных данных с запросом

Вот что у меня есть

models.py

class Post(models.Model):
    id = models.AutoField(primary_key=True)
    text = models.TextField(max_length=165)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'{self.author} posts "{self.text}"'


class Images(models.Model):
    id = models.AutoField(primary_key=True)
    image = models.ImageField(upload_to='images/')
    post_id = models.ForeignKey(Post, on_delete=models.CASCADE)

    def __str__(self):
        return f'{self.post_id.id} - "{self.image}"'

serializers.py

class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Images
        fields = ('image',)

class PostSerializer(serializers.ModelSerializer):
    images = ImageSerializer(many=True, read_only=True, source='images_set')
    author = UserSerializer(read_only=True)
    comments = CommentSerializer(many=True, read_only=True, source='comment_set')
    likes_count = serializers.SerializerMethodField()


    class Meta:
        model = Post
        fields = ['id', 'author', 'text', 'images', 'created_at', "likes_count", 'comments']

    def create(self, validated_data):
        validated_data["author"] = self.context["request"].user
        return super().create(validated_data)

    def validate(self, data):
        if data.get('author') == self.context["request"].user:
            raise serializers.ValidationError('Logged in User is not an Author')
        return data

    def get_likes_count(self, obj):
        return obj.postlikes_set.count()

views.py

class NewPost(APIView):
    permission_classes = [IsAuthenticated]
    parser_classes = [JSONParser]

    def post(self, request):
        text = request.data.get("text")
        post_id = Post.objects.create(author_id=request.user.id ,text=text)
        images = request.FILES.getlist('images')
        for image in images:
            Images.objects.create(image=image, post_id=post_id)
        return Response({"message": "Успешно", 'received data': request.data}, status=status.HTTP_201_CREATED)

Мне нужно отправить данные post, состоящие из текста и нескольких изображений. Мне сказали, что способ сделать это - отправить изображения "в виде двоичных данных", и были ссылки на страницы документации для парсеров JSON. Я понятия не имею, что это на самом деле означает. Если я попытаюсь отправить их следующим образом:

POST {{baseUrl}}/newpost/
Content-Type: application/json
Authorization: Token 195c9587649b81fb9a19eeb19024f63d98790f27

{
  "text": "a new post",
  "images": ["small_django_logo.png", "small_django_logo.png"]
}

Изображения не приходят. Я отправляю материал, отправляя запрос через Visual Studio.

Когда я отправляю запрос GET, я получаю следующее:

{
    "id": 33,
    "author": {
      "id": 1,
      "username": "admin"
    },
    "text": "a new post",
    "images": [],
    "created_at": "2025-02-04T14:14:24.032092Z",
    "likes_count": 0,
    "comments": []
}

Изображения сложно отправлять из интерфейса в django rest framework, но как только вы это сделаете, процесс всегда можно улучшить и использовать в нескольких местах.

попробуйте это -

const formData = new FormData();
formData.append("profileImage", states.profilePic);
formData.append("name", "any_string_value");

axios({
  url: `http://localhost:8000/employee/empMaster/${empId}/`,
  method: "PUT",
  data: formData,
  headers: {
    Authorization: `Token ${token}`,
  },
})
  .then((d) => {})
  .catch((err)=>{})

Примечание - попробуйте ознакомиться с base64 и установите Base64, чтобы вы могли прочитать изображение и щелкнуть по нему, чтобы просмотреть его. Это используется для преобразования типа файла изображения в изображение, доступное для просмотра.

Чтобы получить ответ, прочитайте больше о FormData

спасибо

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