Как отправить изображения в виде двоичных данных с запросом
Вот что у меня есть
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
спасибо