在Django-Rest-Framework中获得REMOTE_ADDR?

qg_*_*137 2 python django django-rest-framework

如何获取请求的remote_addr?

我有一个BileModelListAPIView波纹管:

class BileModelListAPIView(ListAPIView):
    serializer_class = BModelSerializer
    permission_classes = []
    queryset = BileModel.objects.all()

    def get(self, request):

        print(request) # there I debug the point
        return Response(data="ok", status=HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我读了一篇文章,说HttpRequest具有META属性,在META中有REMOTE_ADDR。

但是在我的情况下,如何获得REMOTE_ADDR?

Bor*_*rut 6

您没有说为什么要这样做,但是如果您想获得客户的IP,那将Remote-Address是不可靠的。如果用户位于代理之后或您的服务器位于反向代理之后,它将返回服务器IP。

X-Forwarded-For是获取客户IP的更可靠的方法。如果客户端和您的Web服务器之间存在多个代理,它将返回多个IP地址。

X-Forwarded-For也包含在META属性中,但有时服务器未配置为包含X-Forwarded-For标头。在这种情况下,您会留下Remote-Address

代码:

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
    ip = x_forwarded_for.split(',')[0]
else:
    ip = request.META.get('REMOTE_ADDR')
Run Code Online (Sandbox Code Playgroud)

如果X-Forwarded-For标头不可用,则此代码将从X-Forwarded-For或Remote-Address中的第一个IP获取IP。