Python 向django发送ajax请求并更新html
我正在用Django编写一个web应用程序,它通过ajaxPython 向django发送ajax请求并更新html,python,django,ajax,subprocess,Python,Django,Ajax,Subprocess,我正在用Django编写一个web应用程序,它通过ajaxPOSTrequest在服务器上执行一些用python编写的代码,并且应该在客户端以JSON的形式检索输出,并用javascript部分更新HTML。我可以将请求发送到服务器并执行子流程,还可以检索JSON数据,但不在HTML中更新,而是作为字典显示给网站,而不包含HTML内容。最后一部分不起作用,我发现当我在视图函数中测试ajax请求时,它返回false。另一个问题是子进程有一个文件作为输出,因此我无法从子进程捕获标准输出 view.p
POST
request在服务器上执行一些用python编写的代码,并且应该在客户端以JSON的形式检索输出,并用javascript部分更新HTML。我可以将请求发送到服务器并执行子流程,还可以检索JSON数据,但不在HTML中更新,而是作为字典显示给网站,而不包含HTML内容。最后一部分不起作用,我发现当我在视图函数中测试ajax请求时,它返回false。另一个问题是子进程有一个文件作为输出,因此我无法从子进程捕获标准输出
view.py:
def调用(请求):
call\u form=call(request.POST)
print(request.is_ajax())->返回false?
如果调用表单有效():
纯度参数=调用表格。已清理的数据['purity']
chr_sex=呼叫表单。已清理的_数据['chromosomal_sex']
command=“cnvkit.py call-m clonal--纯度%s--删除低覆盖率%s”%(纯度参数,颜色)
process\u call=subprocess.Popen(command.split(),stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd=sfs.path('cnv\u app/call\u CNS/'),universal\u newlines=True)
stdout,stderr=process_call.communicate()
如果进程调用返回代码和标准:
输出调用+=stdout+'\n'
输出\u err\u call+=stderr+'\n'
其他:
输出调用+=stdout+'\n'
process_call.poll()
响应={'output\u call':output\u call,'output\u err\u call':output\u err\u call}
返回JsonResponse(response)
.html:
呼叫
给定分段log2比率估计值(.cns),使用以下任一方法推导每个分段的绝对整数拷贝数:
{%if call_form%}
{%csrf_令牌%}
{{叫|脆}}
提交
{%endif%}
url.py
path('ajax_call/', views.call, name='ajax_call')
urlpatterns=[
路径('home/',views.home,name='home'),
路径('cnvPipeline/',views.pipeline,name='cnvkit_pipeline'),
]
.js
$('post form')。关于('submit',函数(事件){
event.preventDefault();
$.ajax({
url:“”,
键入:“POST”,
数据:$(this).serialize(),//{'pursity':'0.9','chromosomal_sex':'X'},
数据类型:“json”,
成功:功能(数据){
$(#response_msg).prepend(data.output_调用)
}
});
});
我自己也能找到解决方案,我遵循了本教程:最后我提出了第一个异步请求
.js
url.py
path('ajax_call/', views.call, name='ajax_call')
views.py
def call(request):
call_form = Call(request.POST)
print(request.is_ajax())
if call_form.is_valid():
purity_arg = call_form.cleaned_data['purity']
chr_sex = call_form.cleaned_data['chromosomal_sex']
command = "cnvkit.py call -m clonal --purity %s --drop-low-coverage %s -o %s" % (purity_arg, sex_arg)
process_call = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE,
cwd=sfs.path('cnv_app/call_CNS/'), universal_newlines=True)
stdout, stderr = process_call.communicate()
#if process_call.returncode and stderr:
output_call = stdout + '\n'
output_err_call = stderr + '\n'
process_call.poll()
response_data = {'output_call': output_call, 'output_err_call': output_err_call}
return HttpResponse(
json.dumps(response_data),
content_type="application/json"
)
.html
{%if调用\表单%}
{%csrf_令牌%}
{{叫|脆}}
提交
{%endif%}
无论如何谢谢你 我自己也能找到解决方案,我遵循了本教程:最后我提出了我的第一个异步请求 .js url.py
path('ajax_call/', views.call, name='ajax_call')
views.py
def call(request):
call_form = Call(request.POST)
print(request.is_ajax())
if call_form.is_valid():
purity_arg = call_form.cleaned_data['purity']
chr_sex = call_form.cleaned_data['chromosomal_sex']
command = "cnvkit.py call -m clonal --purity %s --drop-low-coverage %s -o %s" % (purity_arg, sex_arg)
process_call = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE,
cwd=sfs.path('cnv_app/call_CNS/'), universal_newlines=True)
stdout, stderr = process_call.communicate()
#if process_call.returncode and stderr:
output_call = stdout + '\n'
output_err_call = stderr + '\n'
process_call.poll()
response_data = {'output_call': output_call, 'output_err_call': output_err_call}
return HttpResponse(
json.dumps(response_data),
content_type="application/json"
)
.html
{%if调用\表单%}
{%csrf_令牌%}
{{叫|脆}}
提交
{%endif%}
无论如何谢谢你 我想补充的是,我已经将这段代码包含在我的主.js文件中,该文件将头自定义为包含csrf令牌。修复了子流程输出的问题。答案是,我想补充的是,我已经将此代码包含到我的主.js文件中,该文件将头自定义为包含csrf令牌。修复了子流程输出的问题。答案是肯定的