python - 从 Django 从 rest_framework 检索图像
问题描述
模型.py:
from __future__ import unicode_literals
from django.db import models
class Photo(models.Model):
title = models.CharField(max_length=255, blank=True)
file = models.FileField()
uploaded_at = models.DateTimeField(auto_now_add=True)
序列化程序.py:
from rest_framework import serializers
from . models import Photo
class imageSerializer(serializers.ModelSerializer):
class Meta:
model = Photo
fields='__all__'
视图.py:
from django.shortcuts import render,redirect
from django.http import JsonResponse
from django.views import View
import time
from rest_framework import generics
from .forms import PhotoForm
from .models import Photo
from django.http import HttpResponse
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework import status
from .serializers import imageSerializer
import requests
class DragAndDropUploadView(View):
def get(self, request):
photos_list = Photo.objects.all()
return render(self.request, 'UploadMulti/drag_and_drop_upload/index.html', {'photos': photos_list})
def post(self, request):
form = PhotoForm(self.request.POST, self.request.FILES)
if form.is_valid():
photo = form.save()
data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}
else:
data = {'is_valid': False}
return JsonResponse(data)
def clear_database(request):
for photo in Photo.objects.all():
photo.file.delete()
photo.delete()
return redirect(request.POST.get('next'))
class ImagesList(APIView):
def get(self,request):
imagelist=Photo.objects.all()
serializer = imageSerializer(imagelist,many=True)
return Response(serializer.data)
def post(self):
pass
def backend(request):
response = requests.get('http://localhost:8000/images/')
api_values = response.json()
for values in api_values:
print(type(values['file']))
return render(request,"home.html",{'data':api_values})
当我打印 values.file 的类型时,这是我得到的图像数据,因此当将其发送到前端时,图像不会显示
如何从rest api检索为图像文件?
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"id": 1,
"title": "",
"file": "think-twice-code-once.jpg",
"uploaded_at": "2019-11-27T12:34:32.270786Z"
}
]
是否有任何其他方法可以从其余框架获取图像以及图像是否存储为图像格式?
解决方案
问题是由于您FileField
对此特定序列化程序的配置。你需要use_url
是真实的。因此,您可以更改UPLOADED_FILES_USE_URL
设置或设置如下所示use_url=True
。imageSerializer
class imageSerializer(serializers.ModelSerializer):
class Meta:
model = Photo
fields='__all__'
file = serializers.FileField(use_url=True)
旁注,imageSerializer
应该真正ImageSerializer
遵循 python 类命名准则。
推荐阅读
- python - LED 条纹仅在使用 neopixel 库的每秒输入时起作用
- ajax - 有没有办法用 onreadystatechange 事件的值修改全局变量?
- python - 如何使用 logoutButton 注销应用程序?
- linux - 德语变音符号未正确存储在 Linux 系统上的 postgres 中
- regex - 如何为多个子目录制定htaccess重写规则
- python - 我该如何做到这一点,以便我的不和谐机器人应要求从 reddit 发送模因?
- c# - ASP.NET Web API 2 通过 Autofac 的依赖注入访问当前用户声明
- django - 如何使用Django在每个请求的基础上在浏览器关闭时设置cookie过期
- mysql - 数据库导入行但行数不等于导出数据库的行
- smartcard - 无法将小程序(.cap 文件)下载到智能卡中:SW 6D 00(无效指令)