Django-debug-toolbar: IP خاطئ عند وجود شبكات متعددة في Docker

تم إنشاؤها على ١٣ أبريل ٢٠١٨  ·  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 الذي تم إرجاعه بواسطة ip = socket.gethostbyname(socket.gethostname()) ليس هو نفسه دائمًا. يبدو أنه عنوان IP لإحدى الشبكات المختلفة المتاحة (إذا كان ذلك منطقيًا). لذلك في بعض الأحيان يعمل ، ولكن في معظم الأحيان لا يعمل.

انتهى بي الأمر بإضافة جميع عناوين IP المحتملة بناءً على العنوان الذي تم إرجاعه بواسطة socket ، شيء مثل:

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 نفسه ولكن أي مساعدة موضع تقدير وسأعتقد أنها مفيدة للآخرين.

التعليق الأكثر فائدة

هذا ما افعله:

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

يبدو أنه لا يوجد اهتمام إضافي بهذه المشكلة ، وقد حصلت على إجابتي: إغلاق: بشكل بسيط_ابتسامة_الوجه:

يستخدم أحد زملائي حلاً آخر لهذا: في الواقع يوفر شريط أدوات django-debug إعداد تكوين يسمى 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 التقييمات

القضايا ذات الصلة

tim-schilling picture tim-schilling  ·  7تعليقات

stfenjobs picture stfenjobs  ·  6تعليقات

clarkbarz picture clarkbarz  ·  8تعليقات

JoshBradshaw picture JoshBradshaw  ·  6تعليقات

bengolder picture bengolder  ·  6تعليقات