如何让 django-debug-toolbar 只显示在我在 python 上托管的 IP 地址上?
How do I get django-debug-toolbar to only display on my ip address hosted on python anywhere?
我正在尝试在 python 上的 django 应用程序的任何地方使用 django-debug-toolbar。它要求我在我已经完成的设置中设置我的 ip 地址,但工具栏没有显示。经过进一步调查,我发现 django-debug-toolbar 正在寻找 REMOTE_ADDR 属性。问题是 REMOTE_ADDR 属性不是我正常的 ip 地址。看起来他们正在使用负载平衡或其他东西,所以它实际上并没有提供请求来自的 IP。
如果我使用 REMOTE_ADDR 中的 IP 地址,工具栏会显示,但它会显示给访问该站点的每个用户,而不仅仅是我。
如何获取发出请求的客户端的 IP 地址?
Python 在 headers 中的任意位置设置自定义定义,称为
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,
}
或者您可以修改 django-debug-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)
我正在尝试在 python 上的 django 应用程序的任何地方使用 django-debug-toolbar。它要求我在我已经完成的设置中设置我的 ip 地址,但工具栏没有显示。经过进一步调查,我发现 django-debug-toolbar 正在寻找 REMOTE_ADDR 属性。问题是 REMOTE_ADDR 属性不是我正常的 ip 地址。看起来他们正在使用负载平衡或其他东西,所以它实际上并没有提供请求来自的 IP。
如果我使用 REMOTE_ADDR 中的 IP 地址,工具栏会显示,但它会显示给访问该站点的每个用户,而不仅仅是我。
如何获取发出请求的客户端的 IP 地址?
Python 在 headers 中的任意位置设置自定义定义,称为
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,
}
或者您可以修改 django-debug-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)