391 Stimmen

Wie erhalte ich die IP-Adresse des Benutzers in Django?

Wie erhalte ich die IP des Benutzers in Django?

Ich habe eine solche Ansicht:

# Create your views
from django.contrib.gis.utils import GeoIP
from django.template import  RequestContext
from django.shortcuts import render_to_response

def home(request):
  g = GeoIP()
  client_ip = request.META['REMOTE_ADDR']
  lat,long = g.lat_lon(client_ip)
  return render_to_response('home_page_tmp.html',locals())

Aber ich erhalte diesen Fehler:

KeyError at /mypage/
    'REMOTE_ADDR'
    Request Method: GET
    Request URL:    http://mywebsite.example/mypage/
    Django Version: 1.2.4
    Exception Type: KeyError
    Exception Value:
    'REMOTE_ADDR'
    Exception Location: /mysite/homepage/views.py in home, line 9
    Python Executable:  /usr/bin/python
    Python Version: 2.6.6
    Python Path:    ['/mysite', '/usr/local/lib/python2.6/dist-packages/flup-1.0.2-py2.6.egg', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/usr/lib/pymodules/python2.6']
    Server time:    Sun, 2 Jan 2011 20:42:50 -0600

2 Stimmen

Versuchen Sie, request.META.keys() zu dumpen.

3 Stimmen

['HTTP_COOKIE', 'SCRIPT_NAME', 'REQUEST_METHOD', 'PATH_INFO', 'SERVER_PROTOCOL', 'QUERY_STRING', 'CONTENT_LENGTH', 'HTTP_ACCEPT_CHARSET', 'HTTP_USER_AGENT', 'HTTP_CONNECTION', 'SERVER_NAME', 'wsgi.url_scheme', 'SERVER_PORT', 'wsgi. input', 'HTTP_HOST', 'wsgi.multithread', 'HTTP_CACHE_CONTROL', 'HTTP_ACCEPT', 'wsgi.version', 'wsgi.run_once', 'wsgi.errors', 'wsgi.multiprocess', 'HTTP_ACCEPT_LANGUAGE', 'CONTENT_TYPE', 'CSRF_COOKIE', 'HTTP_ACCEPT_ENCODING']

3 Stimmen

Ich danke Ihnen für diese großartige Frage. Mein fastcgi hat den Metaschlüssel REMOTE_ADDR nicht übergeben. Ich habe die folgende Zeile in der nginx.conf hinzugefügt und das Problem behoben: fastcgi_param REMOTE_ADDR $remote_addr;

1voto

CS QGB Punkte 306

In django.VERSION (2, 1, 1, 'final', 0) Anfrage-Handler

sock=request._stream.stream.raw._sock
#<socket.socket fd=1236, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.1.111', 8000), raddr=('192.168.1.111', 64725)>
client_ip,port=sock.getpeername()

Wenn Sie den obigen Code zweimal aufrufen, erhalten Sie möglicherweise

AttributeError("'_io.BytesIO' Objekt hat kein Attribut 'stream'",)

AttributeError("'LimitedStream'-Objekt hat kein Attribut 'raw'")

1voto

Surveyor Jr Punkte 198

Einfach hinzufügen

{{ request.META.REMOTE_ADDR }}

In Django-Template, wo der Benutzer seine IP-Adresse sehen soll. Das heißt, wenn Sie nicht daran interessiert sind, diese in der DB zu speichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X