gpt4 book ai didi

django - 如何在 django rest 框架的分页 URL 中更改下一个键中的主机?

转载 作者:行者123 更新时间:2023-12-02 18:09:56 26 4
gpt4 key购买 nike

我在 Django Rest Framework 中有一个带有分页响应的 ModelSerializer。所以我在 docker 容器中使用 gunicorn 部署了它。

gunicorn -c gunicorn_config.py app.wsgi --bind 0.0.0.0:5000

现在问题出在分页响应中。 next 键类似于。

下一个:“http://0.0.0.0:5000/admin/users/?page=2&per_page=10”

在我使用这些 API 的客户端中,我只需检查 next 键并获取下一个响应。但是由于 next 键的主机为 0.0.0.0:5000 因此它会导致 API 调用失败。并且 next 键没有达到目的。

所以目前,我的 API 服务器在一个单独的 docker 容器中运行。这是通过 nginx 中的反向代理设置的。

最佳答案

DRF 分页器中的 next 链接是使用请求中的主机名生成的。这是在请求中确定主机名的方式:

def _get_raw_host(self):
"""
Return the HTTP host using the environment or request headers. Skip
allowed hosts protection, so may return an insecure host.
"""
# We try three options, in order of decreasing preference.
if settings.USE_X_FORWARDED_HOST and (
'HTTP_X_FORWARDED_HOST' in self.META):
host = self.META['HTTP_X_FORWARDED_HOST']
elif 'HTTP_HOST' in self.META:
host = self.META['HTTP_HOST']
else:
# Reconstruct the host using the algorithm from PEP 333.
host = self.META['SERVER_NAME']
server_port = self.get_port()
if server_port != ('443' if self.is_secure() else '80'):
host = '%s:%s' % (host, server_port)
return host

因此,请检查 HTTP_X_FORWARDED_HOST header 是否设置了您需要的正确主机名,如果是,请在您的设置中将 USE_X_FORWARDED_HOST 设置为 True。还要确保将您需要的主机名添加到 ALLOWED_HOSTS

您还可以覆盖 PageNumberPagination 类中的 get_next_link() 方法以提供所需的主机/域名

关于django - 如何在 django rest 框架的分页 URL 中更改下一个键中的主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62421753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com