Isto é devido ao meu aprimoramento de uma resposta sobre stackoverflow sobre o endereço IP do usuário, levando em consideração os proxies.
Se o usuário estiver atrás de um proxy, o cabeçalho HTTP X FORWARDED_FOR contém uma lista separada por vírgulas de IPs. O primeiro IP é o endereço IP interno do cliente, seguido por um ou mais proxies ou balanceadores de carga que podem ter tratado a solicitação. Leia mais sobre o cabeçalho da Wikipedia .
Esta solução se concentra em obter o endereço IP externo do último cliente (o endereço de proxy), que é o endereço mais à direita no cabeçalho.
def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[-1].strip()
else:
ip = request.META.get('REMOTE_ADDR')
return ip