我将举一个例子来更好地解释我的问题
我的要求:
POST
请求正文:(已发布)
{"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()
我使用Java JAX-RS API进行了大部分REST服务。在这个框架中, POST请求主体被自动反序列化为该方法所接受的对象(在上面的示例中,它是customrequest)。开发人员可以使用POST请求中要查找的属性定义对象,然后执行业务逻辑。
现在我们正在考虑迁移到Django,我想知道Django Rest Framework是否提供了这种开箱即用的行为。如果是这样,我该怎么做? 请注意,在JAX-RS世界中,开发人员无需编写序列化程序。所需要的只是传入对象,其中传入的JSON被去除了。
我假设在Django中,需要一个序列化器和一个传输对象来实现相同的目的。
答案 0 :(得分:1)
在DRF中,您有两种选择:
序列化程序与您调用的transfer object
相同,因为它们都定义了数据结构,并且两者都将保存反序列化的值。
对于模型,它是持久性所必需的,但在JAX-RS中也是必需的,除非您使用与ORM实体相同的类(这是一个糟糕的设计)。因此,在JAX-RS中,您将拥有CustomRequest和JPA CustomRequestEntity