2017-02-08 2 views
2

나는 django app의 어느 곳에서든 python에서 django-debug-toolbar를 사용하려고합니다. 내가 한 설정에서 내 IP 주소를 설정해야하지만 툴바가 표시되지 않습니다. 추가 조사에서 django-debug-toolbar가 REMOTE_ADDR 특성을 찾고 있음을 발견했습니다. 문제는 REMOTE_ADDR 특성이 내 IP 주소가 아닌 것입니다. 로드 밸런싱 등을 사용하고있는 것처럼 보일 수 있으므로 실제로 요청이 들어오는 IP를 제공하지는 않습니다.django-debug-toolbar를 파이썬에서 호스팅되는 내 IP 주소에만 표시하려면 어떻게합니까?

REMOTE_ADDR의 IP 주소를 사용하면 도구 모음이 표시되지만 모든 사용자가 나뿐만 아니라 사이트를 방문하는 사용자에게 표시됩니다.

요청하는 클라이언트의 IP 주소는 어떻게 얻을 수 있습니까?

답변

4

파이썬은 어디 헤더에서 사용자 지정 정의가 HTTP_X_REAL_IP

이 pythonanywhere는 요청을 수신되는 IP 주소입니다

라고 설정하고, 그 실제 클라이언트 IP를 얻기 위해 최선을 작동하는 것 같다.

HTTP_X_FORWARDED_FOR를 사용할 수도 있지만 이론적으로 들어오는 요청이 어떤 종류의 프록시를 통과하여 pythonAnywhere에 도착한 경우 다른 IP 주소 집합을 포함 할 수 있습니다.

이렇게하려면 두 가지 옵션이 있습니다.

첫째, 당신은 당신의 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) 

는 :

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가 가장 보편적입니다. –