2017-02-08 9 views
2

Я пытаюсь использовать панель инструментов django-debug на python в любом месте приложения django. Он требует, чтобы я установил свой IP-адрес в настройках, которые я сделал, но панель инструментов не отображается. После дальнейшего исследования я обнаружил, что панель инструментов django-debug ищет атрибут REMOTE_ADDR. Проблема в том, что атрибут REMOTE_ADDR не является моим IP-адресом, как обычно. Похоже, что они используют баланс нагрузки или что-то в этом роде, и поэтому он фактически не дает IP-адресу, из которого поступает запрос.Как получить панель инструментов django-debug для отображения только на моем ip-адресе, размещенном на python в любом месте?

Если я использую IP-адрес из REMOTE_ADDR, панель инструментов отображается, но она отображается для КАЖДОГО пользователя, который идет на сайт, а не только меня.

Как я могу получить IP-адрес клиента, делающего запрос?

ответ

4

Python в любом месте устанавливает пользовательское определение в заголовках называется

HTTP_X_REAL_IP

Это IP-адрес, с которого pythonanywhere получает запрос, и это, кажется, работает лучше всего для получения фактического клиента IP.

Вы также можете использовать HTTP_X_FORWARDED_FOR, но теоретически может содержать набор различных IP-адресов, если входящий запрос прошел через какой-то прокси-сервер до перехода на pythonAnywhere.

Для этого существует два варианта.

первый, вы можете добавить к вашему settings.py

def custom_show_toolbar(request.META.get('HTTP_X_REAL_IP', None) in INTERNAL_IPS): 
    return True 
# Show toolbar, if the IP returned from HTTP_X_REAL_IP IS listed as INTERNAL_IPS in settings 
    if request.is_ajax(): 
     return False 
# Show toolbar, if the request is not ajax 
    return bool(settings.DEBUG) 
# show toolbar if debug is true 

DEBUG_TOOLBAR_CONFIG = { 
    'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, 
} 

Или вы можете изменить файл middleware.py внутри папки Джанго-отладки на панели инструментов, а также изменение следующего кода:

def show_toolbar(request): 
    """ 
    Default function to determine whether to show the toolbar on a given page. 
    """ 
    if request.META.get('REMOTE_ADDR', None) not in settings.INTERNAL_IPS: 
     return False 

    if request.is_ajax(): 
     return False 

    return bool(settings.DEBUG) 

To:

def show_toolbar(request): 
    """ 
    Default function to determine whether to show the toolbar on a given page. 
    """ 
    if request.META.get('HTTP_X_REAL_IP', None) not in settings.INTERNAL_IPS: 
     return False 

    if request.is_ajax(): 
     return False 

    return bool(settings.DEBUG) 
+0

Спасибо HTTP_X_REAL_IP было то, что мне было нужно! Является ли это набором на каждом сервере или просто pythonanywhere? – Jackobson

+0

PythonAnywhere dev здесь: нет официального стандарта, для которого должен использоваться сервер, стоящий за балансировщиком нагрузки, но X-Real-IP является наиболее распространенным. –