【问题标题】:How do I get django-debug-toolbar to only display on my ip address hosted on python anywhere?如何让 django-debug-toolbar 仅显示在我托管在 python 上的 ip 地址上?
【发布时间】:2017-06-25 14:10:06
【问题描述】:

我正在尝试在 django 应用程序的任何地方在 python 上使用 django-debug-toolbar。它要求我在我已经完成的设置中设置我的 IP 地址,但工具栏没有显示出来。经过进一步调查,我发现 django-debug-toolbar 正在寻找 REMOTE_ADDR 属性。问题是 REMOTE_ADDR 属性不是我正常的 IP 地址。看起来他们正在使用负载平衡或其他东西,因此它实际上并没有给出请求来自的 IP。

如果我使用 REMOTE_ADDR 中的 IP 地址,工具栏会显示,但它会显示给每个访问该站点的用户,而不仅仅是我。

如何获取发出请求的客户端的 IP 地址?

【问题讨论】:

    标签: python django pythonanywhere django-debug-toolbar


    【解决方案1】:

    Python 在任何地方都在名为的标题中设置自定义定义

    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)
    

    【讨论】:

    • 谢谢 HTTP_X_REAL_IP 是我所需要的!这是每台服务器上的集合还是只是 pythonanywhere?
    • PythonAnywhere dev here:对于负载均衡器后面的服务器应使用哪个标头没有官方标准,但 X-Real-IP 是最常见的。
    猜你喜欢
    • 1970-01-01
    • 2021-07-15
    • 2022-08-13
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多