简体   繁体   English

Django REST框架上传图片时出错,提交的数据不是文件

[英]Django rest framework error while uploading image, submitted data is not file

I am new to Django rest framework and when ever I try to do post request via Postman and python script itself it shows error我是 Django 休息框架的新手,当我尝试通过 Postman 和 python 脚本本身进行发布请求时,它会显示错误

{'bloodbank_logo': ['The submitted data was not a file. {'bloodbank_logo': ['提交的数据不是文件。 Check the encoding type on the form.']}检查表单上的编码类型。']}

But there is no error when I try to post image using django admin.但是当我尝试使用 django admin 发布图像时没有错误。

my models.py我的模型.py

from django.db import models
from django.conf import settings
from django.contrib.auth.models import User

# Create your models here.

class Bloodbanks(models.Model):
    bloodbank_user=models.ForeignKey(User, on_delete=models.CASCADE)
    fullbankname=models.CharField(max_length=80,blank=False,default='Null')
    apositive=models.PositiveIntegerField()
    anegative=models.PositiveIntegerField()
    bpositive=models.PositiveIntegerField()
    bnegative=models.PositiveIntegerField()
    abpositive=models.PositiveIntegerField()
    abnegative=models.PositiveIntegerField()
    opositive=models.PositiveIntegerField()
    onegative=models.PositiveIntegerField()
    latitude=models.CharField(max_length=20,blank=False,default='Null')
    longitude=models.CharField(max_length=20,blank=False,default='Null')
    state = models.CharField(max_length=100)
    district=models.CharField(max_length=20,blank=False,default='Null')
    location=models.CharField(max_length=20,blank=False,default='Null')
    website = models.CharField(max_length=100, blank=True)
    bloodbank_logo=models.ImageField(blank=False)
    bloodbank_description=models.CharField(blank=True,max_length=200)
    bloodbank_phone=models.CharField(blank=True,max_length=10)


    def __str__(self):  
        return self.fullbankname

my serializers.py我的序列化程序.py

from rest_framework import serializers,reverse
from bloodbank_api.models import Bloodbanks


class BloodbankdataSerializer(serializers.ModelSerializer):
    bloodbanks_user=serializers.PrimaryKeyRelatedField(source='user.username',read_only=True)
    url = serializers.HyperlinkedIdentityField(
        view_name='bloodbank-detail-id',
        lookup_field='pk'
    )
    bloodbank_logo=serializers.ImageField
    
    class Meta:
        model=Bloodbanks
        fields=['id','bloodbanks_user','fullbankname','apositive',
                'anegative','bpositive','bnegative','abpositive',
                'abnegative','opositive','onegative','latitude',
                'longitude','state','district','location','website',
                'bloodbank_logo','bloodbank_description','bloodbank_phone','url']
    

views.py视图.py

from bloodbank_api.models import Bloodbanks
from bloodbank_api.serializers import BloodbankdataSerializer
from rest_framework import status,mixins,generics
from rest_framework.parsers import FormParser, MultiPartParser,JSONParser
from rest_framework.response import Response
from django.contrib.auth.models import User

  # Create your views here
#updatelistpostput by primary key        
class BloodbankDataDetail(mixins.ListModelMixin,
                        mixins.CreateModelMixin,
                        mixins.RetrieveModelMixin,
                        mixins.UpdateModelMixin,
                        mixins.DestroyModelMixin,
                        generics.GenericAPIView):
    queryset = Bloodbanks.objects.all()
    serializer_class = BloodbankdataSerializer
    parser_class=(MultiPartParser,JSONParser, FormParser) 
    lookup_field = 'pk'
    def get(self, request,*args, **kwargs):
        id=kwargs.get('pk')
        if id is not None:
            return self.retrieve(request,*args, **kwargs)
        return self.list(request, *args, **kwargs)
    def post(self, request, *args, **kwargs):
        print(args,kwargs)
        return self.create(request, *args, **kwargs)

    def perform_create(self, serializer):
        serializer.save(bloodbank_user=self.request.user)
    

urls.py网址.py

from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from bloodbank_api.views import  BloodbankDataDetail
from django.conf import settings
from django.conf.urls.static import static

urlpatterns=[
    path('bloodbank/',BloodbankDataDetail.as_view(),name='bloodbank-detail'),
    path('bloodbank/<int:pk>/',BloodbankDataDetail.as_view(),name='bloodbank-detail-id'),
]
urlpatterns = format_suffix_patterns(urlpatterns)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

the python script that i have used to post do post request我用来发布的python脚本做发布请求

import requests
endpoint='http://127.0.0.1:8000/bloodbank/'
data={
    "fullbankname": "Dirgahyu",
    "apositive": '1',
    "anegative": '1',
    "bpositive": '1',
    "bnegative": '1',
    "abpositive": '1',
    "abnegative": '1',
    "opositive": '1',
    "onegative": '1',
    "latitude": "dhdhd",
    "longitude": "hdhdd",
    "state": "dhhd",
    "district": "dhdhgd",
    "location": "dhdhdhd",
    "website": "jdjdjd",
    "bloodbank_logo": "/Users/aayushdipgiri/aayu's code/opencv/cat.jpeg",
    "bloodbank_description": "hahaha",
    "bloodbank_phone": "hhdhddh"
}
get_response = requests.post(endpoint, json=data) 
print(get_response.json())

First thing I notice is that you are not sending an image, you are sending a string.我注意到的第一件事是您不是在发送图像,而是在发送字符串。 Try this instead to send the file via requests module.试试这个,而不是通过requests模块发送文件。

"bloodbank_logo": open("/Users/aayushdipgiri/aayu's code/opencv/cat.jpeg", "rb"),

If this does not work, I would try using django's FileField instead, but I won't go into detail as the above should work or give you a different error message at least.如果这不起作用,我会尝试使用 django 的FileField ,但我不会详细说明,因为上面应该可以工作或至少给你一个不同的错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django REST Framework上传图片:“提交的数据不是文件” - Django REST Framework upload image: “The submitted data was not a file” 尝试发布POST时未提交文件。 Django Rest Framework - No File was submitted while trying to make a POST. Django Rest Framework Django Rest Framework+React JS,无法实现表单解析器(错误:提交的数据不是文件。检查表单上的编码类型。) - Django Rest Framework+React JS ,unable to implement form parser (error: The submitted data was not a file. Check the encoding type on the form.) 将BASE64图像数据上传并保存到Django Rest框架中的Django图像字段 - uploading and saving base64 image data to a Django image field in django rest framework 使用Django Rest Framework和angularjs保存图像时出错 - Error while saving image using Django Rest Framework with angularjs Django Rest Framework:显示图像时找不到页面 404 错误 - Django Rest Framework: Page Not Found 404 Error while displaying an image django rest framework 3 ImageField发送ajax结果“没有提交文件。” - django rest framework 3 ImageField send ajax result “No file was submitted.” 通过json数据发布时django rest框架错误 - django rest framework error while post through json data 在单个POST数组中使用Django Rest Framework上传倍数图像? - Uploading multiples image with Django Rest Framework in a single POST array? 上载文件时调用Django Rest Framework ModelSerializer更新时出错 - Error when calling Django Rest Framework ModelSerializer update when uploading a file
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM