2017-02-08 4 views
2

私はdjangoアプリケーションのどこでもPython上でdjango-debug-toolbarを使用しようとしています。私が行った設定で私のIPアドレスを設定する必要がありますが、ツールバーは表示されません。さらに調査すると、django-debug-toolbarがREMOTE_ADDR属性を探していることがわかりました。問題は、REMOTE_ADDR属性が私のIPアドレスではないということです。彼らは負荷バランスなどを使用しているように見えるので、実際にリクエストが来ているIPは与えられません。どこのpythonでホストされている私のIPアドレスにのみdjango-debug-toolbarを表示させるには?

REMOTE_ADDRからIPアドレスを使用すると、ツールバーが表示されますが、私だけでなく、サイトに行くすべてのユーザーに表示されます。

リクエストを行ったクライアントのIPアドレスを取得するにはどうすればよいですか?

答えて

4

Pythonはどこかのヘッダーのカスタム定義が

HTTP_X_REAL_IPと呼ばれるセットこれはpythonanywhereが要求を受信するから、IPアドレスであり、それは、実際のクライアントIPを取得するために最善を動作するようです。

HTTP_X_FORWARDED_FORを使用することもできますが、理論的には、着信要求が何らかの種類のプロキシを経由してpythonAnywhereに到達すると、一連の異なるIPアドレスを含む可能性があります。

これには2つのオプションがあります。

まず、あなたの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は私が必要なものだったありがとう!これはすべてのサーバーに設定されているのですか? – Jackobson

+0

PythonAnywhere devここには、ロードバランサの背後にあるサーバが使用すべきヘッダの公式な標準はありませんが、X-Real-IPが最も一般的です。 –

関連する問題