Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将请求图像从Django传递到Python脚本_Django_Api_Django Rest Framework_Request - Fatal编程技术网

尝试将请求图像从Django传递到Python脚本

尝试将请求图像从Django传递到Python脚本,django,api,django-rest-framework,request,Django,Api,Django Rest Framework,Request,我正在创建一个项目,其中我正在向Django本地服务器发送一个带有映像的请求。接收并保存图像,效果良好 但是,在收到图像后,我试图将该文件传递给我的python脚本。在那里,它应该运行带有图像的脚本,并将数据返回给用户 我被卡住了,因为我似乎无法将图像文件名传递给python脚本,因此无法使用图像运行脚本 有人知道如何做到这一点吗 许多(#):是我尝试做的 视图.py class ImageViewSet(mixins.ListModelMixin, mixins.

我正在创建一个项目,其中我正在向Django本地服务器发送一个带有映像的请求。接收并保存图像,效果良好

但是,在收到图像后,我试图将该文件传递给我的python脚本。在那里,它应该运行带有图像的脚本,并将数据返回给用户

我被卡住了,因为我似乎无法将图像文件名传递给python脚本,因此无法使用图像运行脚本

有人知道如何做到这一点吗

许多(#):是我尝试做的

视图.py

class ImageViewSet(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):
"""
    Upload image (Save and Run Script)
   """

parser_classes = (JSONParser, MultiPartParser, FormParser,)
queryset = UploadImageTest.objects.all()
serializer_class = ImageSerializer

def output(self, request):

    imagename = request.FILES['image']
    #imagename = request.data['image']
    #imagename = models.ImageField
    #imagename = request.FILES['image'].name
    #imagename = UploadImageTest.image
    print(imagename)

    #self.request.FILES['image']
    #inp = request.data['image']
    inp = request.FILES.get(imagename)
    out = run([sys.executable,'//Users/macbookpro//TestAPI//venv//TestImageScript.py',inp],shell=False,stdout=PIPE)
    print(out)

    return {"status": "Success", "output": str(out)}
class ImageSerializer(serializers.ModelSerializer):

class Meta:
    model = UploadImageTest
    fields = ('id', 'name', 'description', 'image')
class UploadImageTest(models.Model):
permission_classes = (IsAuthenticated,)

name = models.CharField(max_length=200)
description = models.TextField(blank=True)
image = models.ImageField(upload_to="images/", null=True, blank=True)

def __str__(self):
    return "{}".format(self.name)
序列化程序.py

class ImageViewSet(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):
"""
    Upload image (Save and Run Script)
   """

parser_classes = (JSONParser, MultiPartParser, FormParser,)
queryset = UploadImageTest.objects.all()
serializer_class = ImageSerializer

def output(self, request):

    imagename = request.FILES['image']
    #imagename = request.data['image']
    #imagename = models.ImageField
    #imagename = request.FILES['image'].name
    #imagename = UploadImageTest.image
    print(imagename)

    #self.request.FILES['image']
    #inp = request.data['image']
    inp = request.FILES.get(imagename)
    out = run([sys.executable,'//Users/macbookpro//TestAPI//venv//TestImageScript.py',inp],shell=False,stdout=PIPE)
    print(out)

    return {"status": "Success", "output": str(out)}
class ImageSerializer(serializers.ModelSerializer):

class Meta:
    model = UploadImageTest
    fields = ('id', 'name', 'description', 'image')
class UploadImageTest(models.Model):
permission_classes = (IsAuthenticated,)

name = models.CharField(max_length=200)
description = models.TextField(blank=True)
image = models.ImageField(upload_to="images/", null=True, blank=True)

def __str__(self):
    return "{}".format(self.name)
型号.py

class ImageViewSet(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):
"""
    Upload image (Save and Run Script)
   """

parser_classes = (JSONParser, MultiPartParser, FormParser,)
queryset = UploadImageTest.objects.all()
serializer_class = ImageSerializer

def output(self, request):

    imagename = request.FILES['image']
    #imagename = request.data['image']
    #imagename = models.ImageField
    #imagename = request.FILES['image'].name
    #imagename = UploadImageTest.image
    print(imagename)

    #self.request.FILES['image']
    #inp = request.data['image']
    inp = request.FILES.get(imagename)
    out = run([sys.executable,'//Users/macbookpro//TestAPI//venv//TestImageScript.py',inp],shell=False,stdout=PIPE)
    print(out)

    return {"status": "Success", "output": str(out)}
class ImageSerializer(serializers.ModelSerializer):

class Meta:
    model = UploadImageTest
    fields = ('id', 'name', 'description', 'image')
class UploadImageTest(models.Model):
permission_classes = (IsAuthenticated,)

name = models.CharField(max_length=200)
description = models.TextField(blank=True)
image = models.ImageField(upload_to="images/", null=True, blank=True)

def __str__(self):
    return "{}".format(self.name)
Python脚本

file_name = sys.argv[1]
print(file_name)


img = cv2.imread("file_name")
您是否尝试过:

request.FILES.get['image'].filename
根据ImageField的文档,它继承了包含属性
filename
(不要忘记在文档中查看此字段的描述)的所有属性

编辑

您可以改为尝试
name
attribute:

f = request.FILES['image_url']
print(dir(f))   # This shows everything we can do by using this variable
print("filename : ", f.name)
编辑:

要获得修改后的上传文件名,可以先保存对象,然后检索文件名。您可以尝试以下方法: (假设有一个名为
SomeModel
的模型,并且有一个属性
image\u url
,即ImageField)

someModel=someModel.objects.get(id=id)
数据={'image\u url':image\u url}
序列化的_model=SomeModelSerializer(someModel,data=data,partial=True)
如果未序列化,\u model.\u是否有效()
raise ParseError(序列化的_model.errors)
序列化的_model.save()

打印(序列化的_model.data.get('image _url'))#感谢您的回复。但是,它不起作用。也许我还缺少一些东西。谢谢你的支持。request.FILES.get('image')。name打印并获取文件名,但它总是获取“random.png”。Django会自动重命名文件,每次都创建一个唯一的文件名。我无法获取新生成的文件名。它总是抓取“random.png”。