在数据库中注册时是否有任何简单的方法来存储用户位置

时间:2013-06-18 02:12:45

标签: python django ip

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

有没有办法获得用户的IP address,然后以某种方式获得该IP的city。使用一些APIsomething

4 个答案:

答案 0 :(得分:1)

这绝对不是用户地理定位用户ip的好主意,这是侵扰性的,并且80%的时间都是不可思议的..

如果您的应用确实需要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 :(得分: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']

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不是以任何可靠的方式,或者至少不是在Django中。问题是用户IP通常是动态的,因此地址每隔几天就会发生变化。此外,一些ISP很快将开始为大块用户使用单个IP(忘记了这个名称),因为他们的IPv4 IP地址已经用完......换句话说,来自该ISP的所有用户都处于整个状态甚至国家将拥有一个IP地址。

因此使用IP并不可靠。您可能会以合理的准确度确定用户所在的国家或地区,但我建议不要将IP用于除日志和权限之外的任何事情(例如阻止垃圾邮件IP)。

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