将经度和纬度保存到 Django 中的用户配置文件
Saving Longitude and Latitude to a user profile in Django
我正在寻找一种方法来使用 HTML5(可能还有 JS)将 visitor/user 经度和纬度数据保存到数据库中。我不想在那里使用包,因为它们看起来有点过时,考虑到它们对其他 API 的依赖,将来可能会破坏我的代码。
我知道有一种方法可以使用 AJAX,但我显然对它的了解和理解不够深入,无法实施它。
我向博学的领主提出的要求是- 1.获取Loc数据 2.将其以字典或json或字符串格式发送到Python,从那里可以进一步处理和保存。
为什么你会问 - 好问题。我会用它在主页上显示天气,在 'logged-in' 页面上显示本地 Twitter 趋势。
如有任何帮助,我们将不胜感激。
干杯!
我的JS代码如下:
// Set up global variable
var result;
function showPosition() {
// Store the element where the page displays the result
result = document.getElementById("result");
// If geolocation is available, try to get the visitor's position
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
result.innerHTML = "Getting the position information...";
} else {
alert("Sorry, your browser does not support HTML5 geolocation.");
}
};
// Define callback function for successful attempt
function successCallback(position) {
result.innerHTML = [position.coords.latitude, position.coords.longitude];
}
// Define callback function for failed attempt
function errorCallback(error) {
if (error.code == 1) {
result.innerHTML = "You've decided not to share your position, but it's OK. We won't ask you again.";
} else if (error.code == 2) {
result.innerHTML = "The network is down or the positioning service can't be reached.";
} else if (error.code == 3) {
result.innerHTML = "The attempt timed out before it could get the location data.";
} else {
result.innerHTML = "Geolocation failed due to unknown error.";
}
}
window.onload = showPosition;
在您的 JS 代码中:
function successCallback(position) {
result.innerHTML = [position.coords.latitude, position.coords.longitude];
$.post('your-python-endpoint-url', {
latitude: position.coords.latitude,
longitude: position.coords.longitude
});
}
在你的python中:
def index(request):
if request.is_ajax():
if request.method == 'POST':
print 'Raw Data: "%s"' % request.body
return HttpResponse("OK")
根据需要更改方法名称和主体,不要忘记在 django 中定义路由。
什么对我有用:
首先我建议你在你的模型上使用models.PointField
。
当我在 FE 上获得 long/lat 数据时,我将其作为以下格式的表单数据发送,例如:
"{\"type\":\"Point\",\"coordinates\":[14.215641,50.0100000001]}"
然后我将它映射到模型字段并保存。它保存得很好,以后我可以查询 google 地理编码器或任何东西。
我正在寻找一种方法来使用 HTML5(可能还有 JS)将 visitor/user 经度和纬度数据保存到数据库中。我不想在那里使用包,因为它们看起来有点过时,考虑到它们对其他 API 的依赖,将来可能会破坏我的代码。
我知道有一种方法可以使用 AJAX,但我显然对它的了解和理解不够深入,无法实施它。
我向博学的领主提出的要求是- 1.获取Loc数据 2.将其以字典或json或字符串格式发送到Python,从那里可以进一步处理和保存。
为什么你会问 - 好问题。我会用它在主页上显示天气,在 'logged-in' 页面上显示本地 Twitter 趋势。
如有任何帮助,我们将不胜感激。
干杯!
我的JS代码如下:
// Set up global variable
var result;
function showPosition() {
// Store the element where the page displays the result
result = document.getElementById("result");
// If geolocation is available, try to get the visitor's position
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
result.innerHTML = "Getting the position information...";
} else {
alert("Sorry, your browser does not support HTML5 geolocation.");
}
};
// Define callback function for successful attempt
function successCallback(position) {
result.innerHTML = [position.coords.latitude, position.coords.longitude];
}
// Define callback function for failed attempt
function errorCallback(error) {
if (error.code == 1) {
result.innerHTML = "You've decided not to share your position, but it's OK. We won't ask you again.";
} else if (error.code == 2) {
result.innerHTML = "The network is down or the positioning service can't be reached.";
} else if (error.code == 3) {
result.innerHTML = "The attempt timed out before it could get the location data.";
} else {
result.innerHTML = "Geolocation failed due to unknown error.";
}
}
window.onload = showPosition;
在您的 JS 代码中:
function successCallback(position) {
result.innerHTML = [position.coords.latitude, position.coords.longitude];
$.post('your-python-endpoint-url', {
latitude: position.coords.latitude,
longitude: position.coords.longitude
});
}
在你的python中:
def index(request):
if request.is_ajax():
if request.method == 'POST':
print 'Raw Data: "%s"' % request.body
return HttpResponse("OK")
根据需要更改方法名称和主体,不要忘记在 django 中定义路由。
什么对我有用:
首先我建议你在你的模型上使用models.PointField
。
当我在 FE 上获得 long/lat 数据时,我将其作为以下格式的表单数据发送,例如:
"{\"type\":\"Point\",\"coordinates\":[14.215641,50.0100000001]}"
然后我将它映射到模型字段并保存。它保存得很好,以后我可以查询 google 地理编码器或任何东西。