1. 程式人生 > >Python3 Django 如何獲取真實遠端客戶端IP

Python3 Django 如何獲取真實遠端客戶端IP

解決方法參考

1.自定義中介軟體

生成http.py放到工程目錄:

from django.utils.deprecation import MiddlewareMixin

class SetRemoteAddrFromForwardedFor(MiddlewareMixin):
    """
    如果部署了代理,使用此中介軟體獲取遠端客戶端IP。
    在settings中註冊該中介軟體。
    """
    def process_request(self, request):
        try:
            real_ip = request.META['HTTP_X_FORWARDED_FOR']
        except KeyError as err:
            print(err)
        else:
            real_ip = real_ip.split(",")[0]
            request.META['REMOTE_ADDR'] = real_ip

2.註冊中介軟體

在settings.py中註冊上述自定義的中介軟體。

# 中介軟體
MIDDLEWARE = [
    ...
    'your_project.http.SetRemoteAddrFromForwardedFor',
]

3.使用

在程式中重新使用字典HttpRequest.META。

...
remote_ip = request.META.get('REMOTE_ADDR', '獲取IP失敗')
...