使用Django Rest框架序列化自定义数据类型并返回响应

2023-11-23

大多数关于 Django Rest Framework 的教程都解释了如何使用 Django 模型并执行 CRUD 操作。这是一个GET如果我使用 JSON 序列化程序,对用户模型的请求将以 JSON 格式返回用户对象的属性。

我正在设计 Django 应用程序来处理查询并返回响应。 例如,我提供了一个REST API来获取以下查询的结果

“获取工资高于XXX的用户名和部门”

这是我的 Django 模型:

class UserProfile(AbstractUser):
    age = models.PositiveIntegerField(_("age"))
    salary=models.PositiveIntegerField(_("salary"))

AUTH_USER_MODEL = "profiles.UserProfile"
User = get_user_model()

class Department(models.Model):
      users=models.ForeignKey(User)
      dept_name = models.CharField(max_length=30)

现在我有以下 DTO(数据传输对象):

class CustomResponse(object):

def __init__(self, user_name, salary, dept_name):
      self.user_name = user_name
      self.salary = salary
      self.dept_name=dept_name

在使用 DRF 实现的 REST 服务中,我想要以下内容

@api_view(['GET'])
def getNameandDept(salary):
    users=User.objects.filter(salary__gt=salary)
    toreturn=[]
    for user in users:
        response=CustomResponse(user.first_name,user.salary,user.dept_name)
        to_return.append(response)
    return Response(to_return)

我不确定使用 Django Rest 框架提供的工具来实现上述内容的正确方法是什么。

我期待这样的回应

[{user_name:"matt", salary:"5000", dept_name:"ENG"},{user_name:"smith",salary:"4000", dept_name:"HR"}....]

Thanks

EDIT

我希望 DRF 为这种序列化提供开箱即用的工具。我一直在使用 JAX-RS API(jersey 和 RESTeasy)来执行此序列化。


为此,您实际上并不需要 REST 框架。您所需要的只是定义一个serializer类而不是CustomResponse你有的。

in serializers.py

from django.core.serializers.json import Serializer

class UserSerializer(Serializer):
    def get_dump_object(self, obj):
        mapped_object = {
            'user_name': obj.first_name,
            'salary': obj.salary,
            'dept_name': obj.dept_name
        }

        return mapped_object

然后在你的views.py

from myapp.serializers import UserSerializer

def getNameandDept(request, salary):
    users = User.objects.filter(salary__gt=salary)
    serializer = UserSerializer()
    return HttpResponse(serializer.serialize(users), mimetype='application/json')

不要忘记定义salary你的论点urls.py

url(r'^users/(?P<salary>\d+)$', views.getNameandDept, name='getNameandDept'),

附言。您绝对也可以使用 DRF 来做到这一点。这是一个基本的GET调用(按薪水过滤对序列化器没有影响),因此您需要做的就是定义一个ModelSerializer仅包含三个字段的子类

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('first_name', 'salary', 'dept_name')

然后序列化输出(注意语法略有不同)

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

使用Django Rest框架序列化自定义数据类型并返回响应 的相关文章

随机推荐

  • 拖动和平移完成后获取中心坐标

    我想跟踪地图中心的坐标 到目前为止我一直在使用这个 On Drag End google maps event addListener map dragend function map center coords latitude html
  • Python 帮助读取 csv 文件由于行结束而失败

    我正在尝试创建此脚本 该脚本将检查计算机主机名 然后在主列表中搜索该值以返回 csv 文件中的相应值 然后打开另一个文件并进行查找替换 我知道这应该很容易 但以前没有在 python 中做过这么多 这是我到目前为止所拥有的 masterli
  • Rust是如何实现反射的?

    铁锈具有Any特点 但它也有 不为不使用的东西付费 的政策 Rust是如何实现反射的 我的猜测是 Rust 使用惰性标记 每个类型最初都是未分配的 但后来如果该类型的实例被传递给需要一个Any特征 类型被分配一个TypeId 或者 Rust
  • Flink 键控流密钥为空

    我正在尝试在 Flink 中的 KeyedStream 上执行映射操作 stream map new JsonToMessageObjectMapper keyBy keyfield map new MessageProcessorStat
  • 当应用程序在后台运行时 Android 传感器正在监听

    即使应用程序不在前台 是否可以连续跟踪 Android 上的运动传感器事件 如果是的话 电池的消耗是什么 一位客户询问是否可以编写一个应用程序 在人 跌倒 时启动一个动作 这基本上意味着不断监听运动传感器的快速移动 首先 您绝对可以在后台监
  • 无法在清单资源中找到该报告

    我将所有水晶报表保存在一个文件夹中 VOUCHERS gt SALE gt BILLFORMATS 例如 第一个报告的位置是 VOUCHERS gt SALE gt BILLFORMATS gt BillFormat1 rpt Vegi M
  • 如何绘制按日期聚合的 pandas 数据框

    我有这个数据框 df pd DataFrame 2017 01 14 1 2017 01 14 30 2017 01 16 216 2017 02 17 23 2017 02 17 2 2017 03 19 745 2017 03 19 3
  • 下面的掩码输入问题如何解决?

    我有一个脚本来屏蔽文本框 在这里它 我还有一个脚本可以在单击按钮时动态添加文本框
  • 将国家/地区名称转换为国家/地区代码缩写 php [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 有没有办法将国家名称转换为国家代码缩写 或者一些php函数 这样当 澳大利亚 时
  • 当我尝试在驱动器中搜索时,程序抛出 NullPointerException?

    我编写了一个程序来查找文件或目录 当我尝试使用 in 搜索文件时 它工作正常目录 example java FileSearch abc txt f xyz但是当我尝试从中搜索文件时本地驱动器比程序抛出异常 java FileSearch
  • C# 迭代枚举? (索引 System.Array)

    我有以下代码 Obtain the string names of all the elements within myEnum String names Enum GetNames typeof myEnum Obtain the val
  • Swift - 是什么决定了字典集合的顺序?

    当我说顺序时 我的意思是编译器选择显示结果的顺序 我知道字典没有像数组那样的索引 我有以下字典 let groups Dictionary
  • IDisposable GC.SuppressFinalize(this) 位置

    我的代码使用默认的 IDisposable 实现模板 模式 snippet public void Dispose Dispose true GC SuppressFinalize this protected virtual void D
  • 在 OS X 上安装 GCC 4.7.1

    我正在尝试安装GCC4 7 1 在我的 Mac 上 因为我想更新LLVM GCC4 2 XCode 中给出 我已经下载了GCC4 7 1 我已经放置了gcc 4 7 1文件夹中 Downloads 然后我按照此处给出的说明进行操作 http
  • 如何尽快实现strlen

    假设您使用的是 x86 32 位系统 您的任务是尽快实现 strlen 有两个问题你需要注意 1 地址对齐 2 以机器字长 4 个字节 读取内存 找到给定字符串中的第一个对齐地址并不难 然后我们可以用这4个字节读取一次内存 并计算总长度 但
  • 这是什么? (函数(){})()[重复]

    这个问题在这里已经有答案了 可能的重复 这个 JavaScript 片段是什么意思 自动执行匿名 JavaScript 函数的括号位置 function something here lt This part right here 这到底是
  • 为什么使用静态块而不是直接初始化实例变量?

    为什么我要使用静态块 static B 10 over Integer B 10 一种相对于另一种的优点 缺点是什么 The static块允许您为属性编写更复杂的初始化逻辑 而单行初始化将您限制为单个表达式 请注意 实例属性和静态属性都存
  • 中断线程自身

    我不明白为什么线程不抛出InterruptedException当自己被打断时 我正在尝试使用以下代码片段 公共类中断测试 public static void main String args MyThread t new MyThrea
  • 如何在 django 视图中使用 python 多处理模块

    我有一个简单的函数来遍历 URL 列表 使用GET检索一些信息并更新数据库 PostgresSQL 因此 该功能运行完美 然而 一次一个地浏览每个 URL 会花费太多时间 使用 python 我可以执行以下操作来并行这些任务 from mu
  • 使用Django Rest框架序列化自定义数据类型并返回响应

    大多数关于 Django Rest Framework 的教程都解释了如何使用 Django 模型并执行 CRUD 操作 这是一个GET如果我使用 JSON 序列化程序 对用户模型的请求将以 JSON 格式返回用户对象的属性 我正在设计 D