2013-06-18 1 views
0

django에서 사용자 등록 양식을 작성했습니다. 사용자가 등록한 도시를 알고 싶습니다.데이터베이스에 등록 할 때 사용자 위치를 저장하는 간단한 방법이 있습니까

사용자의 IP address을 얻은 다음 그 IP에 대해 어떻게 든 city을 얻는 방법이 있습니까? 일부 API 또는 something

+0

이 질문에 대한 답변은 : http://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django –

+0

그 질문은 IP를 얻는 것에 관한 것입니다. 그 IP의 위치. – miki725

답변

1

이 사용자의 IP 위치 정보를 확인하는 것은 좋은 생각이의 definetly 아니라,이 방해하고 시간의 80 % .. unexact 될 것

앱을 정말 geodatas 필요한 경우 유일한 방법은 자신이 허용 할 경우 사용자를 요청하는 것입니다 그것은 :

<script> 
var x=document.getElementById("demo"); 
function getLocation() 
    { 
    if (navigator.geolocation) 
    { 
    navigator.geolocation.getCurrentPosition(showPosition); 
    } 
    else{x.innerHTML="Geolocation is not supported by this browser.";} 
    } 
function showPosition(position) 
    { 
    x.innerHTML="Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude; 
    } 
</script> 

출처 : http://www.w3schools.com/html/html5_geolocation.asp

1

REMOTE_ADDR 속성은 request.META입니다. 원격 주소에 대한 완벽한 솔루션은 this post을 확인하십시오.

addr = request.META.get('REMOTE_ADDR', None) 

을이 IP 주소를 저장합니다

등록하는 동안, 당신은 할 수 있습니다.

지금, 당신은이 같은 GeoIP을 사용하여 도시 얻을 수있는 신뢰할 수있는 방법에

from django.contrib.gis.utils import GeoIP 
g = GeoIP() 
addr = request.META.get('REMOTE_ADDR', None) #Or retrive this from the userprofile you saved while registering 

city = 'New York' #Or any default city 
if addr: 
    city = g.city(addr)['city'] 
+0

'g = GeoIP()'를 입력하면 오류가 발생합니다. '매개 변수 또는 GEOIP_PATH 설정을 통해 GeoIP 경로를 제공해야합니다.'오류가 발생했습니다. – user2424160

+0

게시 한 링크를 확인하십시오. 그것은 당신이 필요로하는 모든 것을 갖추고 있습니다. 너에게 단지 요지를 줬어. – karthikr

0

하지 않음을, 또는 적어도 장고있다. 문제는 사용자 IP가 일반적으로 동적이어서 주소가 며칠마다 변하는 것입니다. 또한 일부 ISP는 곧 IPv4 IP 주소가 부족하기 때문에 사용자의 큰 블록 (하나의 IP 주소가 무엇인지 잊어 버린)에 대해 단일 IP를 사용하기 시작할 것입니다. 다시 말해, 전체 주 또는 심지어 ISP 내의 모든 사용자는 국가는 단일 IP 주소를 갖습니다.

IP를 사용하면 신뢰할 수 없습니다. 합리적인 정확성으로 사용자의 국가 또는 지역을 파악할 수 있지만 로깅 및 사용 목적 (예 : 스팸 IP 차단) 이외의 용도로는 IP를 사용하지 않는 것이 좋습니다.

사용자 위치를 원하면 휴대 전화에서 GPS 센서를 사용하는 등의 다른 방법을 사용할 수 있으므로 HTML5 위치 API를 사용하면 훨씬 정확한 위치를 얻을 수 있습니다.

관련 문제