Django-debug-toolbar: Docker의 μ—¬λŸ¬ λ„€νŠΈμ›Œν¬μ—μ„œ 잘λͺ»λœ IP

에 λ§Œλ“  2018λ…„ 04μ›” 13일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: jazzband/django-debug-toolbar

cookiecutter-django에 μ‚¬μš©λœ μ†”λ£¨μ…˜μ€ Django μ»¨ν…Œμ΄λ„ˆκ°€ Docker의 μ—¬λŸ¬ λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ 경우 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(이 SO κ²Œμ‹œλ¬Ό μ—μ„œ

import socket

ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS = ['127.0.0.1', ip[:-1] + '1']

λ‚΄ Docker Compose κ΅¬μ„±μ—λŠ” λ‹€μŒ ν•­λͺ©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

networks:
  web_network: {}
  cache_network: {}
  database_network: {}


services:
  djangoapp:
    networks:
      - database_network
      - web_network
      - cache_network

이제 ip = socket.gethostbyname(socket.gethostname()) λ°˜ν™˜λœ IPκ°€ 항상 κ°™μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. μ‚¬μš© κ°€λŠ₯ν•œ λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ 쀑 ν•˜λ‚˜μ˜ IP인 것 κ°™μŠ΅λ‹ˆλ‹€(μ΄ν•΄ν•˜λŠ” 경우). λ”°λΌμ„œ λ•Œλ•Œλ‘œ μž‘λ™ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ 경우 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 socket μ—μ„œ λ°˜ν™˜λœ IPλ₯Ό 기반으둜 κ°€λŠ₯ν•œ λͺ¨λ“  IPλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

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']

이에 λŒ€ν•œ 더 κΉ¨λ—ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ? 같은 λ¬Έμ œκ°€ μžˆμœΌμ…¨λ˜ λΆ„ κ³„μ‹ κ°€μš”? Django Debug Toolbar μžμ²΄μ™€ 관련이 없을 μˆ˜λ„ μžˆμ§€λ§Œ 도움을 μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이것이 μ œκ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€:

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})()

λͺ¨λ“  것을 ν¬ν•¨ν•˜λŠ” 객체λ₯Ό INTERNAL_IPS ν• λ‹Ήν•˜κΈ° μ ˆλŒ€ 이 μž‘μ—…μ„ μˆ˜ν–‰

λͺ¨λ“  5 λŒ“κΈ€

이것이 μ œκ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€:

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})()

λͺ¨λ“  것을 ν¬ν•¨ν•˜λŠ” 객체λ₯Ό INTERNAL_IPS ν• λ‹Ήν•˜κΈ° μ ˆλŒ€ 이 μž‘μ—…μ„ μˆ˜ν–‰

μ˜λ¦¬ν•œ! μ–ΈκΈ‰λœ SO κ²Œμ‹œλ¬Όμ— 이 닡변을 μΆ”κ°€ν•˜λŠ” 것을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€! λ‚˜λŠ” ν™•μ‹€νžˆ 그것을 μ°¬μ„± ν•  κ²ƒμž…λ‹ˆλ‹€ : 슀마일 :

여기에 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€ :) https://stackoverflow.com/a/49818040/317346

이 λ¬Έμ œμ— 더 이상 관심이 μ—†λŠ” 것 κ°™κ³  λ‚΄ λŒ€λ‹΅μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. λ‹«κΈ° :slightly_smiling_face:

제 λ™λ£Œ 쀑 ν•œ λͺ…이 이λ₯Ό μœ„ν•΄ λ‹€λ₯Έ μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ django-debug-toolbarλŠ” 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,
}
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰