单击即可从Javascript转换为Python
from Javascript to Python on click
我正在为热图开发一个功能。当我点击图表中的一个单元格时,会弹出一个方框图,我使用django和highcharts模型来实现。
目前,我一直忙于将变量从javascript函数传递到python服务器端。我知道django有一个post-and-get方法,但在这种情况下我没有表单,只有点击。每当我点击热图中的一个单元格时,我都想将x标签和y标签字符串传递到python服务器,在python中处理和获取数据,然后将数据反馈到弹出的boxplot。非常感谢。
$(function () {
$('#container').highcharts({
chart: {
type: 'heatmap'
},
plotOptions: {
series: {
events:{
click: function cellClick() {
var $div = $('<div></div>')
.dialog({
title: this.name,
width: 400,
height: 300
});
window.chart = new Highcharts.Chart({
chart: {
renderTo: $div[0],
type: 'boxplot'
},
series: [{
name: 'Observations',
data: [
//here I would like to insert data passed from the python view
// on click of a cell in the heatmap
],
}, {
name: 'Outliers',
color: Highcharts.getOptions().colors[0],
type: 'scatter',
data: [//data from python view],
}]
})
}
}
}
},
xAxis: {
opposite: true,
categories: label,
labels:{
formatter: function(){
//I would like to pass factor_x to the server(python) on click
//of a cell in the heatmap
var factor_x = this.value;
if (factor_x.length > 6){
return factor_x.substr(0,6) ;
}else{
return factor_x;
}
}
},
},
yAxis: {
categories: label2,
labels:{
formatter: function(){
// pass factor_y to the server side on-click
var factor_y = this.value;
if (factor_y.length > 7){
return factor_y.substr(0,7) + "...";
}else{
return factor_y;
}
}
},
},
series: [{
name: 'Factor Correlation',
data: correlation,
}]
});
});
好的,您可以为热图的单元格编写点击函数。
在onclick函数中,您将通过使用javascript中的"this"变量来获取该单元格的值,因为它"告诉"您单击了哪个容器或DOM元素。
因此,现在$(this).data或该元素的任何属性都具有所需的信息(您可以在控制台上的浏览器中通过检查元素来检查这些信息),它将为您提供您想要发送到视图的数据,以便您可以对其进行操作。
因此,您将从onclick函数中调用另一个函数,比如send_data(),并将所需信息作为一个或两个变量或像这样的列表传递给该函数:
send_data(info);
其中info是所有必需元素的列表。
现在,在send_data函数中,您将对视图中与类或def相对应的URL进行ajax调用,您希望向其提供以下信息:
function send_data(req_info) {
$.ajax({
type: "POST",
url: "/heatmap_cell_data/",
data: req_info,
// dataType: 'json',
success: function(response){
console.log(response);
}
});
}
现在,在urls.py中,您将在与Ajax函数中的URL相对应的视图中关联一个def/类。您将在请求中收到这些数据。POST,然后您将在该视图中执行任何您想要的操作,并最终将HTTPResponse(无论您想要什么数据)返回到javascript,您将在成功函数中收到该响应。
注->必须从views.py向Ajax请求发送HTTPResponse,否则将出现未找到HTTPResponse的错误。
现在,您可以使用此响应数据再次修改热图。
我希望这就是你想要的。
Django处理此问题最安全的方法是将CSRF令牌与您在其中发布数据的每个AJAX请求一起传递。最简单的方法是把它放在你的页面上(看起来你正在使用jQuery,所以它应该按原样工作):
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
var csrftoken = getCookie('csrftoken');
$.ajaxSetup({
crossDomain: false, // obviates need for sameOrigin test
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
这样做的目的是当有人访问表单时,获取Django通常存储在浏览器上的CSRF cookie,并将其与AJAX请求一起发送。
这意味着你在页面上的某个地方也需要这样的东西:
<form>
{% csrf_token %}
</form>
在视图函数中,您将需要csrf_protect
装饰器。您也可以使用require_post
只接受此视图上的POST数据:
@require_post
@csrf_protect
def my_view(request):
pass
处理您正在寻找的功能的最理想方法是,当您需要绘图时,将其发布到如上所述的视图中,然后使用另一个视图来获取最新结果。如果多个人可以同时处理它,这也会更好。
在jQuery中,这意味着使用类似于的东西
$.post('/my_view/', some_json_data);
为了收集您将使用的数据:
$.get('/my_view_updates/', success: somefunctiontoparseresponse);
- 当转换为Python日期时间时,Node的时间戳落后3分钟
- 很难将python转换为JS
- 当Python在Javascript中发送时,值将转换为UNICODE
- 如何在python中将ObjectId转换为String
- 将python代码转换为javascript代码
- 使用python将任何音频转换为mp3格式
- 将代码从Javascript转换为Python
- Python 将 str 转换为 JavaScript 文字字符串
- 替换字符(将 python 代码转换为 JavaScript)
- JavaScript 时间戳到 Python 日期时间转换
- 使用 Python 将 HTML/CSS/Javascript 文件转换为 PDF
- 如何在python中将网页表数据转换为json对象或字典
- 如何将 Python 字典转换为 JavaScript 哈希表
- 将Python None转换为JavaScript null
- 重新组装负Python封送int's转换为Javascript数字
- 使用Django模板(列表和dicts)将Python数据结构转换为js数据结构
- 如何将javascript代码转换为python代码
- 将JavaScript对象/数组转换为Python dict/list的最快方法
- Python迷宫生成脚本-转换为Javascript:数学差异
- 将 js 正则表达式转换为 Python 正则表达式