问题标签 [django-rest-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4375 浏览

django - Django:显示用户名而不是 ID,如何?

我有以下序列化程序类。

列出所有配置文件时,用户字段会显示用户 ID。如何更改它以显示 user.username?我知道我的模型只是将它添加到我的元类中,但没有创建用户模型(它是 Django 的一部分)。调用用户时如何告诉 Django 显示用户名而不是 id?

非常感谢。

0 投票
1 回答
3151 浏览

django - Django:在所有查询集对象上运行一个方法

我想知道以下是否可能以及是否有人可以解释如何。我正在使用Django REST 框架

我有一个模型,在那个模型中我有一个名为Product的类。产品具有称为is_product_safe_for_user的方法。它需要用户对象和自我(产品)。

模型.py

(忽略上面的语法,它只是给你一个想法)

我想要做的是对所有查询集对象运行该方法,如下所示,但我不知道如何......

有时我只想在一个对象上运行方法。

还是应该进入序列化器?如果有怎么办?...

0 投票
3 回答
4969 浏览

python - Django Rest Framework / Django 性能问题

我目前正在我的 EC2 小型实例服务器上部署带有 Django-Rest-Framework 的 Django,以为几个 Android 应用程序提供一组 API。

问题是我面临着一个我必须分析的严重性能问题。我发现单个请求的大部分时间都花在了 DRF 的核心中。

很抱歉让这篇文章变得很长,但我认为我必须展示所有内容,以便我能得到正确的答案。让我继续:

我的设置是 nginx / uwsgi。这是我使用 upstart 运行 uwsgi 的方式:

假设我请求以下 API:

符合以下规则:

这是基于类的视图:

序列化程序类:

最后是类方法'get_most_viewed'(我知道使用类方法而不是管理器方法是错误的)

从这一切可以看出,这是一个正常的请求,被重定向到指定的视图,从 MySQL 获取数据,然后返回序列化结果。没有任何异常或任何复杂的处理。

执行:

请注意,这是没有缓存的。经常记录以下内容:

测试期间的平均负载上升到 ~ 5。这是 ab 结果:

首先,每秒 7 个请求是非常令人失望的。~ 1700 由于超时错误而失败的请求也是因为我在这里面临的性能滞后。

说实话。我预计每秒约 60 - 70 个请求而无需缓存。我知道缓存加速了这个过程,但它也隐藏了我遇到的性能问题,这就是为什么我在缓存东西之前寻求解决这个问题的原因。

然后我决定使用 django-profiling 在 vmware CentOS 机器上对此进行分析,通过在请求中添加 ?prof 来显示调用堆栈:

正如你所看到的,大部分时间都花在了 django 视图和 DRF 视图上。

有人可以指出我在这里做错了什么吗?为什么请求这么慢?python / Django 可以扩展吗?我读到它确实可以,但是对于一个简单的数据库读取和渲染操作,例如我正在做的那个,我应该期望多少个请求/秒?

0 投票
2 回答
11561 浏览

django - Rest Framework 序列化器方法

我有以下使用Django REST Framework的序列化程序。

这是我目前所拥有的......

序列化程序.py

网址.py

这段代码存在一些问题。

1)婴儿车 pk=19 是硬编码的,self.kwargs['profile_id'].我应该已经尝试过,但我不知道如何将 kwarg 传递给方法,并且无法让 profile_id 工作。即我无法从 url 获取它。

2)这些代码中的任何一个都应该在模型中吗?我尝试添加到模型,但再次可以传递参数。

models.py 即方法类

0 投票
2 回答
3498 浏览

mongodb - Django Rest Framework 序列化失败:“MetaDict”对象没有属性“pk”

我正在将 Django Rest 框架与 MongoDB 一起使用,我正在尝试从 MongoDB 检索文档,然后将其序列化为 json,以便将其发送回以响应请求。

我有一个看起来像这样的数据库模型:

和相应的序列化器:

现在有了这些,我希望从数据库中检索一个文档,并尝试完全按照关于使用 Django Rest Framework 进行序列化的教程进行操作:

当我运行这些行,尝试序列化时,我得到了这个错误:

从理论上讲,我认为它应该可以工作,因为我在序列化程序的元数据中声明主键是“_id”......有人可以帮我提个建议吗?

谢谢

0 投票
1 回答
7863 浏览

django - 序列化器处理嵌套对象

使用Django REST 框架,我在下面有以下序列化程序。我想将(嵌套)相关对象(ProductCatSerializer)添加到 ProductSerializer。我已经尝试了以下......

所以我想要发生的是 Products 以显示嵌套在结果中的相关类别。

谢谢你。

更新:

使用 depth = 2 选项(感谢 Nandeep Mali )我现在得到了嵌套值,但它们只显示使用 ID 而不是 keyparis 像其余的 json 请求一样(参见下面的类别)。它几乎是正确的。

0 投票
1 回答
3322 浏览

django - Django List deserialization in rest-framework

I am trying to implement a RESTful web service. Everything was going well until I tried to deserialize a list with objects from a post request. My code is this:

The curl command i use to test is:

I have tested my code (without the indexes) with simple post and it works fine. But when I try to post a list I can't. However, after trying the code in the shell (python manage.py shell) I noticed that there is a TODO in the code of the framework:

Is there a problem with the code? Is there any advise I can use? In the final version the users will post strings like the following one, but I try to reach it step by step:

If I can handle lists I will be able to hanble that kind of json.

0 投票
1 回答
865 浏览

django - 如何使用 Django REST 框架处理 many2many

使用Django REST 框架

我的一个模型中有一个many2many字段,即

这创建了它唯一的表,因此我没有在我的模型中映射。

但是,我希望 API 允许对此表进行 POST,但它在模型中不存在,因此在视图和 Serialize.py 中我无法引用它。对此有何建议?

0 投票
3 回答
34572 浏览

python - 糟糕的 Django / uwsgi 性能

我正在使用 nginx 和 uwsgi 运行 django 应用程序。这是我运行 uwsgi 的方式:

& Nginx 配置:

问题来了。在服务器上执行“ab”(ApacheBenchmark)时,我得到以下结果:

nginx版本:nginx版本:nginx/1.2.6

uwsgi 版本:1.4.5

在 500 并发级别上运行时

正如您所看到的......服务器上的所有请求都失败并出现超时错误或“客户端过早断开连接”或:

下面是关于我的应用程序的更多信息:基本上,它是反映包含所有内容的 MySQL 表的模型集合。在前端,我有 django-rest-framework 为客户端提供 json 内容。

我已经安装了 django-profiling 和 django 调试工具栏来看看发生了什么。在 django-profiling 上,这是我在运行单个请求时得到的结果:

..ETC

但是,django-debug-toolbar 显示以下内容:

问题是“顶部”显示负载平均值迅速上升,我在本地服务器和网络中的远程机器上运行的 apache 基准测试表明我每秒没有服务很多请求。问题是什么?这是我在分析代码时所能达到的,所以如果有人能指出我在这里做什么,我将不胜感激。

编辑(23/02/2013):根据 Andrew Alcock 的回答添加更多详细信息: 需要我注意/回答的要点是 (3)(3) 我在 MySQL 上执行了“显示全局变量”并发现 MySQL 配置max_connections 设置有 151 个,这足以为我开始为 uwsgi 服务的工人提供服务。

(3)(4)(2) 我正在分析的单个请求是最重的。它根据 django-debug-toolbar 执行 4 个查询。发生的情况是所有查询分别运行:3.71、2.83、0.88、4.84 毫秒。

(4) 这里你指的是内存分页?如果是这样,我怎么知道?

(5) 在 16 个工作人员,100 个并发率,1000 个请求上,平均负载上升到 ~ 12 我在不同数量的工作人员上运行测试(并发级别为 100):

  1. 1 个工作人员,平均负载 ~ 1.85,19 个请求/秒,每个请求的时间:5229.520,0 个非 2xx
  2. 2 个工作人员,平均负载 ~ 1.5,19 个请求/秒,每个请求的时间:516.520,0 个非 2xx
  3. 4 个工作人员,平均负载 ~ 3,16 个请求/秒,每个请求的时间:5929.921,0 个非 2xx
  4. 8 个工作人员,平均负载 ~ 5,18 个请求/秒,每个请求的时间:5301.458,0 个非 2xx
  5. 16 个工作人员,平均负载 ~ 19,15 个请求/秒,每个请求的时间:6384.720,0 个非 2xx

如您所见,我们拥有的工人越多,系统上的负载就越大。我可以在 uwsgi 的守护进程日志中看到,当我增加工人数量时,响应时间(以毫秒为单位)会增加。

在 16 个工作人员上,运行 500 个并发级别的请求 uwsgi 开始记录错误:

负载也上升到 ~ 10。并且测试不需要太多时间,因为非 2xx 响应是 1000 中的 923,这就是为什么这里的响应非常快,因为它几乎是空的。这也是对摘要中您的第 4 点的回复。

假设我在这里面临的是基于 I/O 和网络的操作系统延迟,那么建议采取什么措施来扩大它?新硬件?更大的服务器?

谢谢

0 投票
1 回答
146 浏览

django - M2M 的 Django REST 元数据丢失

在我的 json 输出中,我似乎没有在我的 m2m 字段 attribute_answers 上获得键值对。请参阅下面的代码。如何在 attribute_answers 字段中添加?

json

串行器