使用 Django REST 框架 Render 返回图像

2023-12-03

我使用上传图像Django REST 框架。现在我试图返回与响应相同的图像。

views.py

class ImageUploadView(viewsets.ModelViewSet):
    queryset = ImageModel.objects.all()
    serializer_class = ImageSerializer

    def create(self, request, *args, **kwargs):
        userID = (request.data.get('userID'))
        serializer = self.get_serializer(data=request.data)
        if not UserModel.objects.filter(id=userID).exists():
            return Response(data={"detail": "Invalid UserID"})
        else:
            if serializer.is_valid():
                serializer.save()                
                return Response(ImageModel.objects.get(id=serializer.data['id']).image, content_type="image/png")
        return Response(data={"detail": "Serializer Error"})

通过使用上面的代码,我既没有得到有效的图像(它返回一个像图像一样的小方框),也没有得到错误
希望有人可以帮忙,谢谢


我遇到了同样的问题,花了几个小时,然后想出了一个解决方案。操作方法如下:

1. 创建自定义渲染器

首先,您需要创建称为自定义渲染器的东西。这是链接到 REST Framework 的渲染器文档如果您想了解更多有关渲染器是什么以及如何制作自定义渲染器的信息。在这种情况下,我们必须为以下内容制作自定义渲染器.jpg and .png文件。为此,我建议您创建一个名为自定义渲染器.py并将以下代码复制到其中:

自定义渲染器.py

from rest_framework import renderers

class JPEGRenderer(renderers.BaseRenderer):
    media_type = 'image/jpeg'
    format = 'jpg'
    charset = None
    render_style = 'binary'

    def render(self, data, media_type=None, renderer_context=None):
        return data

class PNGRenderer(renderers.BaseRenderer):
    media_type = 'image/png'
    format = 'png'
    charset = None
    render_style = 'binary'

    def render(self, data, media_type=None, renderer_context=None):
        return data

2. 导入渲染器并将它们包含在您的视图中

之后,您必须导入刚刚制作的渲染并将它们包含在属性中的视图中renderer_classes = [JPEGRenderer, PNGRenderer]如果您使用基于类的视图(或者如果您使用基于方法的视图,则必须将它们包含在装饰器下@renderer_classes())

3. 其余的视图和返回语句

如果您在视图中提供图像或任何类型的图像,则必须首先使用以下命令打开图像或文件.open()在您收到的作为查询响应字段的图像对象旁边,然后使用FileWrapper()在发送之前包装图像(我在响应中收到一个小黑框的原因就像你一样,是因为我在发送图像之前没有打开图像,也没有使用文件包装器())。所以,你的回应是这样的——return Response(FileWrapper(ImageModel.objects.get(id=serializer.data['id'])['image'].open())

我没有指定返回类型,因为在我的情况下返回类型是自动确定的。因此,您的views.py最终会像:

## All the other necessary imports

from path.to.custom_renderers import JPEGRenderer, PNGRenderer
from wsgiref.util import FileWrapper

#Also, I think this should rather be ImageDownloadView as the client would be downloading the image
class ImageUploadView(viewsets.ModelViewSet):
    renderer_classes = [JPEGRenderer, PNGRenderer]

    queryset = ImageModel.objects.all()
    serializer_class = ImageSerializer

    def create(self, request, *args, **kwargs):
        userID = (request.data.get('userID'))
        serializer = self.get_serializer(data=request.data)
        if not UserModel.objects.filter(id=userID).exists():
            return Response(data={"detail": "Invalid UserID"})
        else:
            if serializer.is_valid():
                serializer.save()                
                return Response(FileWrapper(ImageModel.objects.get(id=serializer.data['id'])['image'].open())
                # You can also specify the content_type in your response
        return Response(data={"detail": "Serializer Error"})

Cheers!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Django REST 框架 Render 返回图像 的相关文章

随机推荐

  • D3.js 中节点上的偏力

    我想分别向节点的几个子部分施加多个力 forceX 和forceY 为了更具说明性 我将此 JSON 作为我的节点的数据 word expression theme Th me 6 radius 3 word th orie theme T
  • Flash Builder“无法连接”错误

    我正在尝试使用 Flash Builder 4 调试 Flash Web 应用程序 但是 我不断收到此错误 无法连接 无法连接到 用于获取配置文件数据的应用程序 请尝试分析应用程序 再次 我将 Internet Explorer 8 Int
  • 将对象序列化为 XML 时以不同方式表示 Null 值

    我使用以下代码将对象序列化为 XML using System IO using System Xml Serialization namespace ConsoleApplication2 class Program static voi
  • 将注释语法添加到 C++ 源代码

    我想在我的 C 源代码中创建我自己的自定义注释 就像 Java 样式注释 标签 由于标准 C 语法不允许注释 因此我想根据自己的需要修改 增强编译器 但是 Visual Studio 是否公开其编译器内部结构供用户修改 例如其词法分析器的输
  • Maven“构建路径指定执行环境J2SE-1.5”,即使我将其更改为1.7

    在 Eclipse Juno 中 我安装了最新的 m2e 插件 1 2 20120903 1050 在首选项中 我在Java gt Installed JREs gt Add中添加了jdk1 7 0 11 然后指定了位置 C Program
  • 为什么 Firefox 和 Opera 会忽略 display: table-cell 内部的最大宽度?

    以下代码在 Chrome 或 IE 中正确显示 图像宽度为 200 像素 在 Firefox 和 Opera 中max width风格被完全忽略 为什么会发生这种情况 有没有好的解决办法 另外 哪种方式最符合标准 Note 对于这种特殊情况
  • 检查对象中的任何属性是否为零 - Swift 3

    我正在使用 Swift 3 想知道是否有任何方法可以检查对象中的所有属性是否都有值 nil Eg class Vehicle var name String var model String var VIN String let objCa
  • “无法实例化名为 UITableViewCellContentView 的类”iPhone 3.1.2

    我已经为自定义 UITableView 单元创建了一个笔尖 并按照文档和不同的教程来解决此错误 并且它不会停止 我研究了这个错误 人们说这是当你 import 标头但没有添加框架时发生的 好吧 UIKit 是自动添加的 我删除并再次添加它以
  • 呈现图像裁剪界面

    我正在尝试设计一个用于在 iPhone 操作系统中裁剪图像的 UI 并怀疑我正在以困难的方式处理事情 我的目标与 Tapbots 二人组使用 Pastebot 所做的差不多 在该应用程序中 它们使源图像变暗 但提供可移动且可调整大小的裁剪视
  • 为什么 Dispatcher.BeginInvoke 会为 ThreadStart 解包 TargetInitationException 而不是为 Action 解包?

    考虑以下两个应用 1 public partial class MainWindow Window public MainWindow InitializeComponent this Dispatcher UnhandledExcepti
  • 如何在Django REST框架中注册用户?

    我正在编写 REST APIDjango REST 框架 该 API 将成为社交移动应用程序的后端 遵循教程后 我可以序列化所有模型 并且能够创建新资源并更新它们 我正在使用 AuthToken 进行身份验证 我的问题是 一旦我有了 use
  • WebRTC 与 PeerJS:iceConnectionState 已断开连接?

    我的每台机器上都有一个节点应用程序正在运行这个例子在本地主机上使用我制作的 PeerServer 密钥 当我尝试在两者之间发起呼叫时 连接就会建立 例如 接收方说它接到了发送方的呼叫 但是 媒体流也会启动 视频 div 中显示黑框 然后连接
  • HTTP 状态 500 - Servlet 执行引发异常

    我在 servlet 中调用 java 类时收到此错误 这是错误 type Exception report message Servlet execution threw an exception description The serv
  • UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加

    UIButton 标题 body 或 headline 的大辅助字体大小不会增加按钮的框架 而只会增加标题文本 从下面的截图中可以清楚地看到 约束只有顶部 前导和尾随 也在代码中我添加了两行 button adjustsImageSizeF
  • MySQL 中的排序/排序

    我在尝试对表格内容进行排序时遇到一些问题programs按列prog id它以以下格式保存每个程序的 id prog id 1 0 1 1 0 2 1 0 3 1 0 10 1 0 11 1 1 0 1 1 1 等 当我按 prog id
  • 在 unix shell 中更改目录(特殊字符)

    我的目录名称以 开头 怎么用cd进入呢 基本转义字符不起作用 cd smol bash cd invalid option cd usage cd L P e dir cd smol bash cd invalid option cd us
  • 如何更改引用 dll 复制到的位置?

    我正在使用一些库 并且添加了对该库 dll 的引用 并将 复制本地 设置为 true 但我想将dll的位置更改为exe文件夹中的子文件夹 而不是与exe一起 这怎么可能 thanks Update 我使用了以下构建后事件 如 Jon Ske
  • 将 Outlook 暂停指定时间

    我尝试在收到电子邮件 10 秒后运行 Outlook 代码 我尝试使用application wait但您似乎无法使用 Outlook 执行此操作 如何将 Outlook 暂停指定的时间 您可以创建一个 Sub 来模仿Application
  • 从简单列表创建下拉菜单

    我当前的列表如下所示 ul li a href Menu 1 a li li a href Submenu a a li li a href Submenu b a li li a href Submenu c a li li a href
  • 使用 Django REST 框架 Render 返回图像

    我使用上传图像Django REST 框架 现在我试图返回与响应相同的图像 views py class ImageUploadView viewsets ModelViewSet queryset ImageModel objects a