使用 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 返回图像 的相关文章

  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • Django Rest Framework:字段名称“likes”对于模型“userPost”配置不正确无效

    在我的 Django Rest Framework api 中 我尝试向我的模型 UserPosts 添加一个属性 该属性返回所述帖子的所有喜欢 尽管我尽了最大努力 但我仍然遇到这个错误 下面是我的帖子模型 class UserPosts
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • 在Python中按属性获取对象列表中的索引

    我有具有属性 id 的对象列表 我想找到具有特定 id 的对象的索引 我写了这样的东西 index 1 for i in range len my list if my list i id specific id index i break
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • 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