0

我有用户注册表单django。我想知道用户注册的城市。

有什么方法可以让我获得IP address用户的,然后以某种方式获得该cityIP 的。使用一些APIsomething

4

4 回答 4

1

这绝对不是一个地理定位用户 ip 的好主意,这是侵入性的,并且 80%​​ 的时间都是不准确的。

如果您的应用程序确实需要地理数据,唯一的方法是询问用户是否要允许它:

<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

于 2013-06-18T02:21:05.087 回答
1

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']
于 2013-06-18T02:22:13.093 回答
0

这是您的 GeoIP 功能:https ://github.com/aschem/django-user-location

于 2013-06-18T02:19:34.757 回答
0

没有任何可靠的方式,或者至少在 Django 中没有。问题是用户 IP 通常是动态的,因此地址每隔几天就会更改一次。此外,一些 ISP 很快将开始为大量用户使用单个 IP(忘记这叫什么),因为它们的 IPv4 IP 地址用完了……换句话说,来自该 ISP 的所有用户在整个州甚至国家/地区将有一个 IP 地址。

所以使用IP是不可靠的。您可能会以合理的准确度计算出用户所在的国家或地区,但我的建议是不要将 IP 用于除日志记录和许可目的之外的任何用途(例如阻止垃圾邮件 IP)。

但是,如果您想要用户位置,则可以使用 HTML5 位置 API,它可以更好地获得更准确的位置,因为它可以利用其他方法,例如我们在手机中使用 GPS 传感器。

于 2013-06-18T02:27:52.057 回答