django - django rest框架的控制流程是什么

标签 django django-rest-framework tastypie control-flow

我正在为 webapp 开发 api。我最初使用的是tastypie 并切换到django-rest-framework (drf) . Drf 对我来说似乎很容易。我打算做的是创建嵌套的用户配置文件对象。我的模型如下

from django.db import models
from django.contrib.auth.models import User

class nestedmodel(models.Model):
    info = models.CharField(null=True, blank=True, max_length=100)


class UserProfile(models.Model):
    add_info = models.CharField(null=True, blank=True, max_length=100)
    user = models.OneToOneField(User)
    nst = models.ForeignKey(nestedmodel)

我有其他具有外键关系的模型。我的序列化程序如下
from django.contrib.auth.models import User, Group
from rest_framework import serializers
from quickstart.models import UserProfile, nestedmodel


class NestedSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = nestedmodel
        fields = ('info', )

class UserSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'groups')


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ('url', 'name')

class UserProfileSerializer(serializers.HyperlinkedModelSerializer):
    user = UserSerializer()
    nst = NestedSerializer()
    class Meta:
        model = UserProfile
        user = UserSerializer(many=True)
        nested = NestedSerializer(many=True)
        fields = ('nst', 'user')

我可以覆盖像 create(self, validated_data): 这样的方法没有任何问题。但我想知道的是to which method should the response returned by create() goes ,或者换句话说 Which method calls create() .在 Tastypie Resources.py是要覆盖以实现自定义方法的文件。 Resources.py 包含调用方法的顺序。 drf 中的哪个文件具有相同的用途,并说明了像tastypie 中的 Resources.py 一样的控制流?。

最佳答案

所以流程是这样的:

  • Viewset的 create() CreateModelMixin 中实现的方法
  • 这将创建序列化程序并对其进行验证。一旦有效,它将使用 View 集的 perform_create()
  • 调用序列化程序的 save() 方法
  • 然后依次调用序列化程序的 create() update() 取决于实例是否传递给序列化程序(它不在步骤 1 中)
  • create()update()然后创建/更新实例,然后保存在 serializer.instance
  • Viewset 然后返回来自 serializer.data 的数据的响应
  • serializer.data 实际上是序列化器的一个属性,它负责将实例序列化为字典
  • 要序列化数据, to_representation() 使用。
  • 然后通过 renderers 将响应数据(Python dict)呈现为输出格式可能是 json、xml 等

  • And Resources.py contains the order in which methods are being called. Which is the file in drf that serves the same purpose and illustrates the control flow like Resources.py in tastypie?.



    猜猜这将是文件的组合。考虑您所接触的类/概念可能会更好,因为在 DRF 中,您可以从多个事物继承以创建您的类。所以把所有东西粘在一起的东西是viewsets .然后有各种 View 集混合,实际上将 View 集粘合到序列化器和不同的 CRUD 操作。

    关于django - django rest框架的控制流程是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31824660/

    相关文章:

    python - Django 模板中带空格的字典键

    python - Django 模型问题

    django - 如何覆盖 Django 可重用应用程序的模型?

    django - 如何使用 DRF (Django Rest Framework) 和 mongoengine 实现 JSON Web Token?

    python - 为什么这个 Django API 调用会出现意外的关键字参数错误?

    python - 有没有更简单的方法来按类别显示我的对象?

    python - 无法使用 Django Rest Framework 序列化 AnonymousUser 对象 - 缺少属性

    python - 在 Django Tastypie API 中包含子资源

    Django jQuery ajax 发布到 https 失败

    django - 是否可以设置django-tastypie对象键?