で作成したユーザー登録フォームを持っていますdjango
。ユーザーが登録している都市を知りたいです。
IP address
ユーザーの を取得しcity
、その IP の を取得する方法はありますか。いくつかまたはを使用しAPI
てsomething
これは、ユーザーの IP をジオロケートするのは絶対に良い考えではありません。
あなたのアプリが地理データを本当に必要とする唯一の方法は、それを許可するかどうかをユーザーに尋ねることです:
<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>
REMOTE_ADDR
のプロパティrequest.META
。リモートアドレスの完全なソリューションについては、この投稿を確認してください。
登録中に、次のことができます。
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']
GeoIP 機能は次のとおりです: https://github.com/aschem/django-user-location
信頼できる方法ではなく、少なくとも Django ではありません。問題は、ユーザー IP が通常動的であるため、アドレスが数日ごとに変化することです。また、一部の ISP は、IPv4 IP アドレスが不足しているため、すぐにユーザーの大きなブロックに単一の IP を使用し始めるでしょう (これが何と呼ばれるかは忘れました)。国には単一の IP アドレスがあります。
そのため、IP の使用は信頼できません。おそらく妥当な精度でユーザーの国または地域を割り出すことができますが、ログと許可の目的以外には IP を使用しないことをお勧めします (スパム IP のブロックなど)。
ただし、ユーザーの位置が必要な場合は、HTML5 ロケーション API を使用できます。これは、電話で GPS センサーを使用するなどの他の方法を利用できるため、より正確な位置を取得するためのはるかに優れたショットになります。