我有用户注册表单django
。我想知道用户注册的城市。
有什么方法可以让我获得IP address
用户的,然后以某种方式获得该city
IP 的。使用一些API
或something
这绝对不是一个地理定位用户 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>
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 很快将开始为大量用户使用单个 IP(忘记这叫什么),因为它们的 IPv4 IP 地址用完了……换句话说,来自该 ISP 的所有用户在整个州甚至国家/地区将有一个 IP 地址。
所以使用IP是不可靠的。您可能会以合理的准确度计算出用户所在的国家或地区,但我的建议是不要将 IP 用于除日志记录和许可目的之外的任何用途(例如阻止垃圾邮件 IP)。
但是,如果您想要用户位置,则可以使用 HTML5 位置 API,它可以更好地获得更准确的位置,因为它可以利用其他方法,例如我们在手机中使用 GPS 传感器。