python – 使用Django Rest框架来序列化自定义数据类型并返回响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用Django Rest框架来序列化自定义数据类型并返回响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2421字,纯文字阅读大概需要4分钟。
内容图文
![python – 使用Django Rest框架来序列化自定义数据类型并返回响应](/upload/InfoBanner/zyjiaocheng/753/c35b3a1c89fa4292bda4b4e395a43f4f.jpg)
关于Django Rest Framework的大多数教程都解释了使用Django模型并进行CRUD操作.如果我使用JSON序列化程序,那么用户模型上的GET请求将以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"}....]
谢谢
编辑
我希望DRF为这种序列化提供开箱即用的工具.我一直在使用JAX-RS API(jersey和RESTeasy)执行此序列化.
解决方法:
您实际上并不需要REST Framework.您所需要的只是定义一个序列化程序类而不是您拥有的CustomResponse.
在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')
不要忘记在urls.py中定义salary参数
url(r'^users/(?P<salary>\d+)$', views.getNameandDept, name='getNameandDept'),
PS.你绝对可以用DRF做到这一点.这是一个基本的GET调用(按工资过滤对序列化程序没有影响),所以你需要做的就是定义一个只有三个字段的ModelSerializer子类
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('first_name', 'salary', 'dept_name')
然后序列化输出(注意略有不同的语法)
serializer = UserSerializer(users)
return Response(serializer.data)
内容总结
以上是互联网集市为您收集整理的python – 使用Django Rest框架来序列化自定义数据类型并返回响应全部内容,希望文章能够帮你解决python – 使用Django Rest框架来序列化自定义数据类型并返回响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。