📜  DRF:获取 IP 地址 - Python (1)

📅  最后修改于: 2023-12-03 14:40:52.384000             🧑  作者: Mango

DRF:获取 IP 地址 - Python

在使用 Django REST Framework (DRF) 构建 API 时,有时我们需要获取客户端的 IP 地址。本文将介绍如何使用 Python 和 DRF 获取客户端的 IP 地址。

方法一:在视图中获取 IP 地址

在 DRF 的视图中,我们可以通过 request 对象获取客户端的 IP 地址。以下是一个示例视图函数:

from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['GET'])
def get_client_ip(request):
    client_ip = request.META.get('HTTP_X_FORWARDED_FOR') or request.META.get('REMOTE_ADDR')
    return Response({'ip_address': client_ip})

在上面的代码中,request 对象是 DRF 请求对象中的一个属性,我们可以使用 request.META.get('HTTP_X_FORWARDED_FOR') 获取客户端的真实 IP 地址。如果该地r址不存在,则使用 request.META.get('REMOTE_ADDR') 获取客户端的 IP 地址。

方法二:使用中间件获取 IP 地址

除了在视图中获取 IP 地址,我们还可以使用中间件来截取请求并获取客户端的 IP 地址。以下是一个示例中间件类:

class ClientIPMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        client_ip = request.META.get('HTTP_X_FORWARDED_FOR') or request.META.get('REMOTE_ADDR')
        request.client_ip = client_ip
        response = self.get_response(request)
        return response

上面的代码中,中间件类 ClientIPMiddleware__call__() 方法会拦截请求,并将客户端的 IP 地址存储在 request.client_ip 属性中。

要使用该中间件,我们需要将其添加到 DRF 配置中的 MIDDLEWARE 列表中。在 settings.py 文件中找到 MIDDLEWARE 参数,将 ClientIPMiddleware 添加到其中:

MIDDLEWARE = [
    # ...
    'myapp.middleware.ClientIPMiddleware',
    # ...
]
总结

通过以上方法,我们可以在 DRF 中获取客户端的 IP 地址。无论是在视图中获取还是使用中间件,您都可以选择最适合您项目需求的方法来获取 IP 地址。希望本文对您有所帮助!