16)django-ajax使用
通过ajax可以悄悄的把数据传输给服务器,实现页面无刷新。
一:ajax使用语法
1)普通方式
ajax使用语法:
$.ajax({
url:"/host", //提交到那里
type:"POST", //提交类型
data:{"k1":"v1","k2":"v2"} //提交的数据
success:function(data1){ //success不会直接运行,当服务器有数据传输过来才会触发执行。
匿名函数必须要有一个参数,用来接受数据,data1用来接受是服务器端返回字符串数据
alter(data1);
}
})
示例:
#ajax使用例子1
urls.py
url(r'^test_ajax$', views.ajax_submit), views.py
def ajax_submit(request):
if request.method=="POST":
print(request.POST.get("k1"),request.POST.get("k2"))
return HttpResponse("home") 模板:
<a id="ajax_submit">悄悄的提交</a> script:
$("#ajax_submit").click(function() {
$.ajax({
url: "/test_ajax",
type: "POST",
data: {"k1": "v1", "k2": "v2"},
success: function (data1) {
alert(data1);
}
})
})
2)通过页面传递数据
$.ajax({
url: "/test_ajax",
type: "POST",
data: {"hostname":$("#hostname").val(),"ip":$("#ip").val(),"port":$("#port").val(),"group_id":$("#group_id").val()},
success: function (data1) {
alert(data1);
}
})
data: {"hostname":$("#hostname").val(),"ip":$("#ip").val(),"port":$("#port").val(),"group_id":$("#group_id").val()},
可以通过如下方式代替:
data: $('#add_form').serialize(),把放有form表单数据都打包到后台,不需要自己一个个写字典数据
$.ajax({
url: "/test_ajax",
type: "POST",
data:$("#add_form").serialize(),
success: function (data1) {
alert(data1);
}
})
#ajax使用例子2 传递页面数据给后台
<form action="/host" method="post">
<div class="group">
<input type="text" name="hostname" id="hostname" placeholder="请输入主机名">
</div>
<div class="group">
<input type="text" name="ip" id="ip" placeholder="请输入主机IP">
</div>
<div class="group">
<input type="text" name="port" id="port" placeholder="请输入主机端口">
</div>
<div class="group">
<select name="group_id" id="group_id">
{% for group in v4 %}
<option value="{{ group.id }}">{{ group.caption }}</option>
{% endfor %}
</select>
</div>
<div class="group">
<input type="submit" value="提交">
<input type="button" value="取消">
<a id="ajax_submit" style="cursor: pointer">悄悄的提交</a>
</div>
</form> $("#ajax_submit").click(function() {
$.ajax({
url: "/test_ajax",
type: "POST",
data: {"hostname":$("#hostname").val(),"ip":$("#ip").val(),"port":$("#port").val(),"group_id":$("#group_id").val()},
success: function (data1) {
alert(data1);
}
})
}) def ajax_submit(request):
if request.method=="POST":
print(request.POST)
return HttpResponse("home") 输出结果:<QueryDict: {'hostname': [''], 'ip': [''], 'group_id': ['']}>
#示例3--返回验证数据:为什么要加try,如果后台要异常了,前端页面是不能感知的,所以我们加try抛出异常,并给前端提交ret def test_ajax(request): ret = {'status': True, 'error': None, 'data': None}
try:
h = request.POST.get('hostname')
i = request.POST.get('ip')
p = request.POST.get('port')
b = request.POST.get('b_id')
if h and len(h) > 5:
models.Host.objects.create(hostname=h,
ip=i,
port=p,
b_id=b)
else:
ret['status'] = False
ret['error'] = "太短了"
except Exception as e:
ret['status'] = False
ret['error'] = '请求错误'
return HttpResponse(json.dumps(ret)) $('#ajax_submit').click(function(){
$.ajax({
url: "/test_ajax",
type: 'POST',
data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
success: function(data){
var obj = JSON.parse(data);//字符串转对象
if(obj.status){
location.reload(); //如果没有错重新加载页面(刷新))
}else{
$('#erro_msg').text(obj.error);
}
}
})
}); ## data: $('#add_form').serialize(),把放有form表单数据都打包到后台,不需要自己一个个写字典数据 data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
<===> data:$("#add_form").serialize(), 表格中的数据,有id但是在点编辑的时候就会没有,所以要把id传递给编辑
在编辑对话框里传递<input type="text" name="nid" style="display:none"> $('.edit').click(function(){
$('.shade,.edit-modal').removeClass('hide'); var bid = $(this).parent().parent().attr('bid');
var nid = $(this).parent().parent().attr('hid'); 传递nid $('#edit_form').find('select').val(bid); //设置下拉框默认值
$('#edit_form').find('input[name="nid"]').val(nid);//设置传递的nid // 修改
/*
$.ajax({
data: $('#edit_form').serialize()
});
*/
// models.Host.objects.filter(nid=nid).update()
})
3)如果页面的数据是列表,上面的数据传输到后台处理不了
#ajax添加,注意列表
$("#ajax_buttom").click(
function(){
$.ajax(
{
url:"/ajax_add_app",
type:"POST",
dataType:'JSON',//==>JSON.parse(data)
data:{"k1":[1,2,3,4]},//data:{"k1":[1,2,3]}传入后台会处理不了.发列表需要加参数 traditional:true
traditional:true,
success:function(data){
alert(data);
},
error:function(data){ //执行失败执行 }} ) } )
二:ajax与非 ajax多对多数据
#增加数据例子(非ajax)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.shade {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: #333333;
opacity: 0.6;
z-index: 9;
} .add-mode {
position: fixed;
height: 300px;
width: 400px;
top: 100px;
left: 50%;
margin-left: -200px;
z-index: 11;
background-color: white;
} .hide {
display: none;
}
</style>
</head>
<body>
<input type="button" value="增加" id="add_host">
<h1>应用列表</h1>
<table border="1px">
<thead>
<tr>
<td>应用名称</td>
<td>应用主机列表</td>
</tr>
</thead>
<tbody>
{% for app in app_list %}
<tr>
<td>{{ app.name }}</td>
<td>{% for r in app.r.all %}
<span>{{ r.hostname }}</span>
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="shade hide"></div>
<div class="add-mode hide">
<form action="{% url "app" %}" id="add_form" method="post">
<div class="group">
<input type="text" name="app_name" id="app_name" placeholder="请输入应用名">
</div> <div class="group">
<select name="host_list" id="host_list" multiple="multiple">
{% for host in host_list %}
<option value="{{ host.nid }}">{{ host.hostname }}</option>
{% endfor %}
</select>
</div>
<div class="group">
<input type="submit" value="提交" id="add_ok">
<input type="button" value="取消">
</div>
</form>
</div>
<script src="/static/jquery-1.12.4.js"></script>
<script>
$("#add_host").click(
function () {
$(".shade,.add-mode").removeClass("hide")
console.log($(".shade,.add-mode"))
}
)
</script>
</body>
</html> ---------------------
def app(request):
if request.method=="GET":
app_list=Application.objects.all()
# for app_tmp in app_list:
# print(app_tmp.name,app_tmp.r.all())
host_list=Host.objects.all()
return render(request,"app.html",{"app_list":app_list,"host_list":host_list})
elif request.method=="POST":
#先创建application
app_name=request.POST.get("app_name")
host_list=request.POST.getlist("host_list")#列表
obj=Application.objects.create(name=app_name)#create会返回当前创建的对象
obj.r.add(*host_list)
return redirect("/app") #ajax添加,注意列表
$("#ajax_buttom").click(
function(){
$.ajax(
{
url:"/ajax_add_app",
type:"POST",
dataType:'JSON',//==>JSON.parse(data)
data:{"k1":[1,2,3,4]},//data:{"k1":[1,2,3]}传入后台会处理不了.发列表需要加参数 traditional:true
traditional:true,
success:function(data){
alert(data);
},
error:function(data){ //执行失败执行 }
}
)
}
) def ajax_add_app(request):
if request.method=="POST":
list_1=request.POST.getlist("k1")
print(list_1)
return HttpResponse("OK")
--------------
[02/Nov/2017 15:40:04] "POST /ajax_add_app HTTP/1.1" 200 2
['', '', '', ''] #删除,编辑 编辑 <div class="edit-mode hide">
<form action="{% url "app" %}" id="add_form" method="post">
<div class="group">
<input type="text" name="app_name" id="app_name" placeholder="请输入应用名">
</div> <div class="group">
<select name="host_list" id="host_list" multiple="multiple">
{% for host in host_list %}
<option value="{{ host.nid }}">{{ host.hostname }}</option>
{% endfor %}
</select>
</div>
<div class="group">
<input type="submit" value="提交" id="add_ok">
<input type="button" value="ajax提交" id="ajax_buttom">
</div>
</form>
</div> $(".edit_a").click(
function(){
$(".shade,.edit-mode").removeClass("hide");
//把获取的数据加入列表
var host_list=[]
$(this).parent().prev().children().each(
function(){
host_list.push($(this).attr("hid"))
}
)
$(".edit-mode").find("select").val(host_list);
}
)
16)django-ajax使用的更多相关文章
- 关于Django Ajax CSRF 认证
CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的 ...
- Django ajax MYSQL Highcharts<1>
Another small project with django/Ajax/Mysql/Highcharts. 看下效果图 - delivery dashboard .嘿嘿 是不是还蛮好看的. 废 ...
- django ajax练习
这几天遇到了django ajax请求出错的问题,总结一下 前端js:我这里创建的是一个字典格式的数据,前端js收到字典之后也是要用字典的形式去解包后台传送过来的数据,比如我下面的写法:data['s ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- python学习-- Django Ajax CSRF 认证
使用 jQuery 的 ajax 或者 post 之前 加入这个 js 代码:http://www.ziqiangxuetang.com/media/django/csrf.js /*======== ...
- 3/16 Django框架 环境搭建
3/16 Django框架 环境搭建 环境搭建 Python解释器 Python代码通过Python解释器去执行. 编程语言 机器语言---汇编语言(助记符)---高级语言 解释型语言:解释器将代码一 ...
- Python之路【第三十一篇】:django ajax
Ajax 文件夹为Ajaxdemo 向服务器发送请求的途径: 1.浏览器地址栏,默认get请求: 2.form表单: get请求 post请求 3.a标签,超链接(get请求) 4.Ajax请求 特点 ...
- Django——Ajax相关
Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数 ...
- django ajax 及批量插入数据 分页器
``` Ajax 前端朝后端发送请求都有哪些方式 a标签href GET请求 浏览器输入url GET请求 form表单 GET/POST请求 Ajax GET/POST请求 前端朝后端发送数据的编码 ...
- Django——Ajax
1.Ajax简介 AJAX(Asynchronous Javascript And XML)--"异步的JavaScript与XML". Ajax使用Javascript语言与服务 ...
随机推荐
- ASP.NET MVC 5 笔记
1. MVC 的常用特性 1) System.Web.Mvc.ActionNameAttribute Ø 该特性用于将当前 Action 名称,改为一个指定的 Action 名称,路由匹配时 ...
- Java爬网页数据,并存储到本地数据库中
由于开发一个人工智能项目,需要强大的后台数据库加持,所以,没有办法,又是需要医疗数据,只能自己爬某医疗网站数据,进行分析,但是由于不同网站的结构不一样,所以这个程序只能爬该网站的,第一次爬网页数据,自 ...
- Linux之备份(tar)/解压与压缩(gzip,bzip2,xz)【待完善】
[本博文,待完善] 以data原始文件为例,同tar备份,用xz压缩,实现备份->压缩整个过程的正向过程(生成.tar.xz)与其逆过程(先解压,后还原备份文件) 1.备份(tar) tar - ...
- UE4 位置转换相关函数
get mouse positionget mouse position scaled by dpiget viewport scaleDeproject Scence to WorldLocal T ...
- Jupyter 同时支持python2, python3
从docker hub 下载了一个 tensorFlow 镜像,但是里面只支持python2.7 kernel, 不支持python3 kernel. 1. Notebook的右上角点new 只看到 ...
- luogu P5112 FZOUTSY
传送门 毒瘤出题人,卡我常数 如果后缀排序后将两两之间height\(\ge k\)的后缀放在一组,那么每次询问的答案就是\(\sum_{i} \binom{num[i]}{2}\)(num[i]是第 ...
- Python 获取文件中最长行的长度和最长行
1, 使用文件 #vim /etc/motd "1 hello world" 2 ...... yes 3 no you are a shadiao 4 hahh maye you ...
- 【tmos】shell工具推荐
xshell(推荐) putty
- 《Java编程思想第四版》附录 C Java 编程规则
附录 C Java 编程规则 本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符 ...
- linux 文件处理命令