【问题标题】:how to bind HTTP POST data to python object in Django Rest Framework?如何将 HTTP POST 数据绑定到 Django Rest Framework 中的 python 对象?
【发布时间】:2015-04-04 13:48:53
【问题描述】:

我将举一个例子来更好地解释我的问题

我的要求:

发布

http://localhost:8080/users/

请求正文:(已发布)

{"name":"Matt", 
 "salary":10000,
 "blog_url":"www.myblog.com",
 "dept_name":"ENG"
}

class CustomRequest(object):
    def __init__(self,name,salary,blog_url,dept_name):
       self.name=name
       self.salary=10000
       self.blog_url=blog_url
       self.dept_name=dept_name

models.py

class myUser(models.Model):
     //fields -- username, salary

class myUserProfile(models.Model):
      User=models.OneToOneField(user)
      blog_url=models.URLfield()
      dept_name=models.ForeignKey(Department)



@apiview(['POST'])
def createUser(customrequest):
      myuser=user(customrequest.name, customrequest.salary)
      myuser.save()

      myuser.userprofile.blog_url(customrequest.blog_url)
      myuser.userprofile.dept_name(customrequest.dept_name)
      myuser.save()

我的大部分 REST 服务都使用 Java JAX-RS API。在这个框架下, POST请求体会自动反序列化为方法传入的对象(上例中为customrequest)。开发人员可以定义一个具有他在 POST 请求中寻找的属性的对象,然后执行业务逻辑。

现在我们正在考虑迁移到 Django,我想知道 Django Rest Framework 是否提供了这种开箱即用的行为。如果是这样,我该怎么做? 请注意,在 JAX-RS 世界中,开发人员不需要编写序列化程序。所需要的只是传入的 JSON 被脱轨的传输对象。

我假设在 Django 中,需要序列化程序和传输对象来实现相同的目的。

【问题讨论】:

    标签: json django jax-rs django-rest-framework


    【解决方案1】:

    在 DRF 中,您有两种选择:

    • 要么使用 ModelSerializer,然后自动获取模型实例
    • 或者您使用 Serializer 并获得验证数据并使用它做任何您喜欢的事情

    序列化器与您所说的 transfer object 相同,在某种意义上,它们都定义了数据结构并且都将保存反序列化的值。

    对于模型,它是持久性所必需的,但在 JAX-RS 中也是必需的,除非您使用与 ORM 实体相同的类(这是一个糟糕的设计)。因此,在 JAX-RS 中,您将拥有例如 CustomRequest 和 JPA CustomRequestEntity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 2019-09-22
      • 2013-11-12
      • 2019-04-30
      • 2014-10-03
      • 2014-09-04
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多