我有django
中的用户注册表单。
我想知道用户注册的城市。
有没有办法获得用户的IP address
,然后以某种方式获得该IP的city
。使用一些API
或something
答案 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>
答案 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传感器。