【问题标题】:Issue with requests in django rest frameworkdjango rest框架中的请求问题
【发布时间】:2019-08-09 20:59:27
【问题描述】:

我使用 django restframework 创建了一个 API。它在 django 开发服务器上运行良好。当应用程序迁移到 Web 服务器(apache mod wsgi,nginx - gunicorn)时,只有当分页设置为每页 100 条记录时它才能正常工作,如果分页设置为超过 100 条记录,则请求 100 到 200 条记录它们仍然停滞或阻塞。

我在 Apache 中使用 wsgi 和 gunicorn 使用 nginx 部署了应用程序。但问题仍然存在。 它在任何页面大小的 django 开发服务器上都能完美运行,如果我将页面大小设置为 100 条记录,它在服务器上也能正常工作。

查看


class SoftwareList(generics.ListCreateAPIView):

    queryset = SoftwareModel.objects.all().order_by('-id')
    serializer_class = SoftwareSerializer
    http_method_names = ['get']
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('product_type',)

型号


class SoftwareModel(models.Model):
    id = models.AutoField(primary_key=True)
    product_id = models.CharField(unique=True, max_length=255, blank=True, null=True)
    product_type = models.CharField(unique=True, max_length=255, blank=True, null=True)
    software_suggestion = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'software_view'

序列化器


class SoftwareSerializer(serializers.ModelSerializer):
    class Meta:
        model = SoftwareModel
        fields = ('id', 'product_id', 'product_type',
                  'software_suggestion')

设置


REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100
}

预期:分页数不是 100 的请求。

实际:请求停滞/阻塞

【问题讨论】:

  • 我可以看看你的模型和序列化器吗?它似乎是由进行大量查询引起的timeout 问题。
  • 当然,问题已更新。

标签: django django-rest-framework django-views


【解决方案1】:

没有足够的代表发表评论...

听起来像是查询数量的优化问题。您是否使用select_related()prefetch_related() 来跟踪外键字段?

您还可以安装django-debug-toolbar 以在处于调试模式并使用rest_framework.renderers.BrowsableAPIRenderer 时计算查询次数

【讨论】:

  • 不,我没有使用 select_related () 或 prefetch_related ()。我将验证这些方法,看看发生了什么。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 2015-06-18
  • 1970-01-01
  • 2019-07-14
  • 2017-05-22
  • 2023-03-21
  • 2018-07-31
相关资源
最近更新 更多