KdP*_*sda 4 django nginx gunicorn django-rest-framework docker
我在 Django Rest Framework 中有一个带有分页响应的 ModelSerializer。所以我将它与gunicorn一起部署在docker容器中。
gunicorn -c gunicorn_config.py app.wsgi --bind 0.0.0.0:5000
现在的问题出在分页响应中。关键next是类似的东西。
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
Run Code Online (Sandbox Code Playgroud)
因此,请检查标头是否HTTP_X_FORWARDED_HOST设置了您需要的正确主机名,如果是,请在您的设置中进行USE_X_FORWARDED_HOST设置True。还要确保您需要的主机名已添加到ALLOWED_HOSTS.
您还可以重写类get_next_link()中的方法PageNumberPagination以提供所需的主机/域名
| 归档时间: |
|
| 查看次数: |
2725 次 |
| 最近记录: |