A solução usada em cookiecutter-django não funciona quando o contêiner Django está conectado a várias redes no Docker. A solução é algo como o seguinte (tirado desta postagem do SO ):
import socket
ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS = ['127.0.0.1', ip[:-1] + '1']
Minha configuração do Docker Compose tem os seguintes itens:
networks:
web_network: {}
cache_network: {}
database_network: {}
services:
djangoapp:
networks:
- database_network
- web_network
- cache_network
Agora, o IP retornado por ip = socket.gethostbyname(socket.gethostname())
não é sempre o mesmo. Parece ser o IP de uma das diferentes redes disponíveis (se isso fizer sentido). Às vezes funciona, mas na maioria das vezes não.
Acabei adicionando todos os IPs possíveis com base no retornado por socket
, algo como:
def internal_docker_ips(base_ip):
numbers = base_ip.split('.')
return [
'.'.join([numbers[0], str(i), numbers[2], str(j)])
for i in range(1, 254) for j in (1, 3) # all IPs ending with '.1' and '.3'
]
INTERNAL_IPS = [
'127.0.0.1',
]
INTERNAL_IPS.extend(
internal_docker_ips(
socket.gethostbyname(
socket.gethostname())))
# ['127.0.0.1', '172.1.0.1', '172.1.0.3', '172.2.0.1', '172.2.0.3', ..., '172.253.0.1', '172.253.0.3']
Existe uma solução mais limpa para isso? Algum de vocês teve o mesmo problema? Pode não estar relacionado ao Django Debug Toolbar em si, mas qualquer ajuda é apreciada e acredito que será útil para outros.
Isto é o que eu faço:
if DEBUG:
# `debug` is only True in templates if the vistor IP is in INTERNAL_IPS.
INTERNAL_IPS = type(str('c'), (), {'__contains__': lambda *a: True})()
Simplesmente atribua um objeto que contém todas as coisas a INTERNAL_IPS
. É claro que nunca faça isso em um host de produção!
Esperto! Você deve considerar adicionar esta resposta à postagem SO mencionada! Eu definitivamente votaria positivamente: smile:
Eu adicionei aqui :) https://stackoverflow.com/a/49818040/317346
Parece que não há mais interesse neste assunto, e obtive minha resposta: encerrando: ligeiramente_sorriso_face:
Um de meus colegas usa outra solução para isso: na verdade, django-debug-toolbar fornece uma definição de configuração chamada SHOW_TOOLBAR_CALLBACK
.
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': lambda request: True,
}
# or
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': lambda request: True if DEBUG else False,
}
Comentários muito úteis
Isto é o que eu faço:
Simplesmente atribua um objeto que contém todas as coisas a
INTERNAL_IPS
. É claro que nunca faça isso em um host de produção!