django Rest框架的控制流程是什么

2024-03-27

我正在为 web 应用程序开发 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()。在美味馅饼中Resources.py是要重写以实现自定义方法的文件。 Resources.py 包含调用方法的顺序。 drf 中的哪个文件具有相同的目的,并说明了像 tastypie 中的 Resources.py 一样的控制流程?


所以流程是这样的:

  1. 视图集的create() https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L18-L23方法是在CreateModelMixin
  2. 这将创建序列化器并验证它。一旦有效,它就会使用视图集perform_create() https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L25-L26
  3. 这调用了序列化器save() https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L138-L180 method
  4. 然后依次调用序列化器的任一create() https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L175 or update() https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L170取决于实例是否传递给序列化器(它不在步骤 1 中)
  5. create() or update()然后创建/更新实例,然后保存在serializer.instance
  6. 然后 Viewset 返回来自以下数据的响应serializer.data https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L23
  7. serializer.data https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L210-L228实际上是序列化器上的一个属性,它负责将实例序列化为字典
  8. 要序列化数据,to_representation() https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L438-L458用来。
  9. 然后响应数据(Python dict)通过以下方式呈现为输出格式渲染器 https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/renderers.py可以是 json、xml 等

Resources.py 包含调用方法的顺序。 drf 中的哪个文件具有相同的目的,并说明了像 tastypie 中的 Resources.py 一样的控制流程?

我猜这将是文件的组合。最好根据您正在接触的类/概念来思考,因为在 DRF 中您可以继承多个事物来创建您的类。所以将一切粘合在一起的东西是viewsets http://www.django-rest-framework.org/api-guide/viewsets/。然后有各种视图集混合,它们实际上将视图集粘合到序列化器和不同的 CRUD 操作。

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

django Rest框架的控制流程是什么 的相关文章

  • Django 中的内联表单集 - 删除某些字段

    我需要创建一个内联表单集 a 排除一些字段MyModel完全显示出来 b 显示一些字段MyModel但阻止它们被编辑 我尝试使用下面的代码 使用values 为了将查询集过滤为我想要返回的值 然而 这失败了 有人有什么想法吗 class P
  • Wagtail / Hallo.js - 添加插件但修改的内容未保存

    我正在 Wagtail 1 3 1 Django 1 7 11 上运行 我已经激活了 Hallohtml 和 Hallojustify 插件 它们出现在工具栏中 没有图标 但有按钮 可以使用按钮 并且可以在文本区域中看到修改 我的意思是 例
  • Django django-location-field 缺少 API 密钥

    我正在使用https github com caioariede django location field https github com caioariede django location field使用 Django 构建位置视图
  • 将 Sql Server 与 Django 2.0 结合使用

    我想将 Django 2 0 与旧版 MS SQL Server 数据库一起使用 我能找到的有关使用 Django 与 MS SQL Server 的最新信息是在生产中使用 Sql Server 和 Django 这些天 https sta
  • django 在我的机器上非常慢

    我全新安装了 django 1 0 并提供了一个简单的页面 需要 5 秒才能加载 在我同事的计算机上几乎不需要时间 我使用启动服务器 python manage py testserver 我可以看到每个 GET 请求 PNG 和样式表 大
  • Django:时区问题

    注意 我删除了之前存在的问题 并在此处仅提供相关信息 我们的数据库服务器 RH 指定了 TIME ZONE Europe London 并且 在 Django settings py 中 我们指定 TIME ZONE America New
  • Django AJAX JSON 响应在浏览器中显示为原始文本

    我正在 Pinax 框架内使用 Django 1 4 2 开发一个 Stripe Web 应用程序 django stripe 付款 艾尔达瑞安 阿贾克斯 我已经一切正常 除了 ajax 响应 JSON 格式 似乎没有被任何 ajax 回调
  • 将 django 与邮递员一起使用{“详细信息”:“CSRF 失败:CSRF 令牌丢失或不正确。”}

    我正在使用邮递员检查来自 django rest framework 的 json 响应 当我第一次尝试通过 POST 方法将 id 电子邮件 密码发布到 AWS 亚马逊网络服务 上的 django 时 效果很好 它返回如下 key 99d
  • Django admin在同一行显示多个字段

    我创建了一个模型 它将自动显示模型中的所有字段并将其显示在管理页面上 现在 我有一个问题 我希望在同一行上有两个字段 为此我必须在 ModelAdmin 中指定字段集 fieldsets None fields firstname last
  • 出现错误:User 类型的对象在 django python 中不可 JSON 序列化

    我是 django python 的新手 当我尝试从 3 个表获取数据时 出现错误Object of type User is not JSON serializable 任何人都可以帮我解释为什么我会收到此错误吗 在这里我添加了我的vie
  • Django 模板如何将数字转换为单词

    我正在寻找一个模板标签来将 522 这样的值转换为 522 查看我遇到的文档 django contrib 人性化 它有一个内置标签 intword 但它只适用于数字大于一百万的数字 作为替代解决方案 我使用以下函数创建了一个标签将数字转换
  • Heroku 中没有运行 Django 的 Web 进程

    我试图在heroku中部署我的应用程序 但是当我最终尝试在heroku中运行我的应用程序时 我在浏览器中看到了这样的内容 Application Error An error occurred in the application and
  • 疑难解答“WSGIRequest”对象没有属性“用户”?

    我正在尝试使用 login required装饰者但我得到了 WSGIRequest object has no attribute user 属性错误 我有进口声明from django contrib auth decorators i
  • 嵌套和分段的脆皮布局

    TLDR 问题 如何使用 分段 不确定这是否被视为内联 布局和多个模型 有些相关 有些不相关 制作一个脆脆的表单 我正在尝试理解 Django 中的几件事 表单 表单集 嵌套表单和脆皮 我已经研究了一段时间了 感觉我已经很接近了 只是需要有
  • 从 Django 缓存中删除特定项目?

    我正在使用站点范围的缓存内存缓存 http en wikipedia org wiki Memcached作为后端 当底层数据库对象更改时 我想使缓存中的页面无效 如果页面名称发生更改 那么我将使整个缓存无效 因为它会影响每个页面上的导航
  • Django allauth Facebook 本地开发

    我在用着Django allauth https github com pennersr django allauth对于正在开发的网站的 Facebook 身份验证 并进行了相应的设置 在 facebook 的 facebook 应用程序
  • 如何在我的 django 视图函数中从 Ajax POST 获取数据?

    document ready function addFolder input keydown function e if e keyCode 13 name this val ajax type POST url folder data
  • Django为模型表单返回两个单独的__str__

    我有一个Task包含任务和实体外键的模型 class Task models Model task models CharField max length 500 entity models ForeignKey Entity 我有一个与一
  • urllib2.urlopen 在 Django 中失败

    I use urllib2 urlopen url 获取 HTML 内容 网址是http 127 0 0 1 8000 m html 该方法成功获取HTML内容 但在 Django 中 如果我尝试获取 HTML 内容 它会在函数中停止 ur
  • Django:从 QueryDict 读取 JSON 对象数组

    如何通过 JS 的 AJAX 调用传递复合 JSON 结构 并在服务器端将其读取为 python 中的 非常相似 的数据结构 我知道可以使用 json 格式 simplejson 等 但我不知何故觉得 QueryDict 本身在我的情况下格

随机推荐

  • 获取终端中可用线路的数量

    如何找到终端中的可用线路数量 最好以跨平台的方式 但欢迎任何建议 甚至特定于操作系统 终端的高度和长度可以使用以下公式找到os https docs python org 3 library os html querying the siz
  • 暂停本地通知

    我正在开发一个警报应用程序 并为此使用本地通知 现在我想为我的闹钟添加贪睡功能 我在Google上搜索发现iPhone不支持此类功能 但还有其他方法可以做到这一点吗 据我所知 当通知窗口弹出时 您无法添加自定义行为 但 你可以这样尝试 用户
  • 我们如何创建一个更大的中心 UITabBar Item

    我想知道我们如何创建一个更大的中心 UITabBar 如下图所示 真的很漂亮 单击要突出显示的特定选项卡栏项目的视图控制器内的选项卡栏按钮 删除文本 只需将标签栏按钮的图像插入顶部设置为 25即可 就像下图一样 在那之后 goto asse
  • Vim 语法文件与 \zs 不匹配

    我试图通过更改 fsharp 语法文件中的这一行 来自this https github com fsharp vim fsharp插件 来自 syn match fsharpModule
  • 如何在Python中打印命令?

    我不从事编程领域 但最近对 Python 感兴趣 我正在编写一些函数 但为了调试 我需要查看正在运行哪些命令 例如 def foo for i in xrange 0 5 a 1 i 是否可以让解释器输出 gt gt gt for i in
  • 在 JQueryUI 选项卡选择上加载 ASP.NET MVC 部分视图

    我一直在寻找最后一天 找不到在过去一两年内提出的关于这个特定主题的任何内容 并且由于 JQuery 似乎相当多地弃用了一些东西 因此就当前的情况提出这个问题似乎是公平的jQuery API 对 JQuery 有点陌生 我想知道这一点 如果我
  • 具有动态宽度的居中固定 div (CSS)

    我有一个 div 具有以下 CSS some kind of popup position fixed top 100px min height 300px width 90 max width 900px 现在 我怎样才能让这个div居中
  • 高阶函数和柯里化函数之间的区别

    我在读一本书 使用 F 进行函数式编程 https rads stackoverflow com amzn click com 1107684064 which 第 33 页 在 部分高阶函数的声明 我们已经看到了高阶内置函数 例如 和 并
  • 跨多个工作表的 VBA 宏

    我正在尝试运行一个在多个工作表上执行功能的宏 假设我已经在工作表 4 上分配了宏按钮 我已经列出了我希望它逐步执行的功能 1 选择工作表 4 中的某些单元格并复制到工作表 4 中的相邻单元格 2 删除工作表 3 中的单元格区域 3 剪切工作
  • 根据语言重定向用户

    我有以下代码
  • 捕获右键单击 AS3

    是否可以在Flash AS3 中捕获右键单击 没有 JQuery JavaScript 当右键单击被捕获时 我需要暂停游戏 所以我不太想禁用上下文菜单 因为我只是想告诉发生了右键单击 我可以添加一个 EventListener 吗 还有其他
  • 具有多个参数的复杂排序?

    我有一个元组列表 li fink 3 flip 3 flock 4 foo 12 foot 20 football 20 futz 10 flip 3 flank 3 flop 3 如何首先按血统编号对列表进行排序 然后按字母顺序降序排序
  • 耙子中止! nil:NilClass 的未定义方法“先决条件”

    剧透 这是一个过时的版本rspec rails gem 在将我的 sqlite3 gem 移动到开发块中 然后运行 rake db migrate 以确保一切仍然有效之后 我在从 Rails 项目目录发出的任何 rake 命令中都遇到了此错
  • 如何使用poco实体生成器

    我用的是VS2010 下载了C POCO 实体生成器 http visualstudiogallery msdn microsoft com en us 23df0450 5677 4926 96cc 173d02752313并安装了它 现
  • GetProcAddress 以及所有已加载的库

    With dlopen你可以提供NULL作为库名称并获取一个句柄 使您可以在其中查找符号any加载的库的数量 如果文件名是 NULL 指针 则返回的句柄是 主程序 当赋予 dlsym 时 该句柄会导致搜索 主程序中的符号 后面是加载的所有共
  • Node.JS 中的基本 HTTP 身份验证?

    我正在尝试使用 NodeJS 编写一个 REST API 服务器 就像使用的那样Joyent http api no de 一切都很好 除了我无法验证普通用户的身份验证 如果我跳到终端并执行curl u username password
  • 如何获取 IShellItem 的系统图像列表图标索引?

    给定 Windows Vista 或更高版本IShellItem 如何获取与该项目关联的系统图像列表图标索引 例如 伪代码 IShellItem networkFolder SHGetKnownFolderItem FOLDERID Net
  • 引起原因:java.sql.SQLException:不支持的字符编码“utf8mb4”

    我正在编写一个将大量使用 utf 8 编码的应用程序 对于服务器 我使用 java servlet 对于 UI 我使用带有 jsp 和 javascript 的 Java Servlet 因此 在忽略乱码一段时间后 我决定解决 utf 8
  • 在 WPF DataGrid 中显示“显示名称”而不是字段名称

    这是我的类定义 public class Customer Display Name Customer ID public int ID get set Display Name Customer Name public string Cu
  • django Rest框架的控制流程是什么

    我正在为 web 应用程序开发 api 我最初使用的是 tastypie 后来改用了django rest framework drf Drf 对我来说似乎很容易 我打算做的是创建嵌套的用户配置文件对象 我的模型如下 from django