进阶Django(一):Django与Ajax
目录
Ajax
JQuery
Ajax前端实现:JQuery向后端发送ajax请求
JQuery的ajax函数
$.ajax({settings})
Ajax后端实现:Django读取并相应ajax请求
实例:ajax实现异步更新html
其实我倒是认为这教程不该放在django进阶里,毕竟这是一个比较独立的内容,包括cookie不该放在JSP教程里一样。但是这个教程的例子用的是django,所以暂时就先这样吧。
Ajax
Ajax即“Asynchronous Javascript And XML And HTML”,异步的Javascript与XML。Ajax可以在不重新加载整个网页的情况下,通过js与网页后端的交互,达成更新部分网页的技术。Ajax是异步的。Ajax是一种技术,而不是编程语言。
Ajax的优点:相对快速而且省资源。Ajax的缺点:对爬虫不友好。
Ajax的实现:js向页面后端发送ajax请求,后端返回组织过的数据,js根据数据更新部分网页。
在本文中,我们使用django和jQuery实现Ajax。
JQuery
JQuery是一个Javascript库,它“极大地简化了Javascript编程”(这句话我照抄的菜鸟教程,不过我对JS没有很深刻的了解,那就当是真的吧)。
本文中需要使用的JQuery十分简单,而笔者的JS确实不行。所以建议读者先自学一会,请把JQuery的部分语法与CSS联系在一起。
注:JQuery毕竟是个库,使用之前需要导入。一些网站会提供JQuery文件的公共引用地址,比如百度的http://apps.bdimg.com/libs/jquery/1.6.4/jquery.js。
Ajax前端实现:JQuery向后端发送ajax请求
JQuery的ajax函数
实现Ajax请求的函数有很多,举例如下:
-$.ajax({settings}):应该是最原始的ajax函数了,参数最多
-$.get(url,data,func,dataType):用get方式执行ajax请求
-$.post(url,data,func,datatype):用post方式执行ajax请求
-$.getJSON(url,data,func):可以看做dataType设置为JSON的$.get()
-$.getScript(url,func):用get发送ajax请求,并直接执行返回的js
-$.load(url,data,func):将返回的数据直接写入DOM,其HTTP方式由data存在与否决定,存在则是get,反之post
可以看出除了第一个函数,后面的这些其实都属于对第一个函数的简化版本,所以我们直接讲$.ajax()。
$.ajax({settings})
对于$.ajax()而言,其所有参数都是可选的。你可以通过$.ajaxSetup()设置这些可选参数的默认值,这里我们就先跳过,直接对$.ajax()函数设置参数。主要的参数如下:
-url:默认为本页面,设置为接收ajax请求的url
-type:默认为get,本次ajax请求采用的传递方式
-data:要传递给后端的参数,可以为Object也可以为String
-dataType:这个参数设定为JQuery希望后端返回的数据类型,如果不指定,JQuery会根据服务器返回的mime信息作为responseXML或者responseText传递
-beforeSend:这是一个函数,在发送请求前调用,其接收的参数为XMLHttpRequest,也就是本次请求的XML序列。在此函数中如果返回false,将会终止本次ajax请求
-complete/success/error:这是一个回调函数,在完成/发送成功/发送失败时被调用
-dataFilter:这是一个函数,对后端返回的数据进行预处理
由于ajax前端请求本质上还是个http请求,所以没什么好讲的,我就不举例了。本教程关于ajax的使用我会举一个完整的例子放在最后。
Ajax后端实现:Django读取并相应ajax请求
之前我提过,ajax请求本质上还是http请求,所以view对ajax的接收也没有什么不同。但是我们要返回一个能被Jquery以期望方式读取的数据格式。可以返回JsonResponse,也可以通过HttpResponse(Json.dumps(data))返回有结构的数据(当然你也可以直接返回一个文本)。
注1:如果你的django项目启用了csrf验证,你接受ajax请求的视图函数前需要加上一个装饰器“@csrf_exempt”(引入:from django.views.decorators.csrf import csrf_exempt)。
注2:如果你想直接把model对象集合传输给前端,使用JsonResponse(List(此集合.values()),safe=false)
实例:ajax实现异步更新html
都看到这里了,我默认你已经学会了django的基本操作,所以我只放出html编写和接受ajax的视图函数部分。
Html:
<!doctype html><html><head><script src="http://apps.bdimg.com/libs/jquery/1.6.4/jquery.js" ></script></head><body><p id="p1">点击以发送ajax</p><script>$("p").click(function(){$.ajax({url:"/ajax",type:"post",success:function(response){var root=document.getElementById("p1");//获取p root.innerHTML=root.innerHTML+response;}})})</script></body></html>
View:
from django.views.decorators.csrf import csrf_exempt@csrf_exemptdef ajax(request):if(request.method=="POST"):return HttpResponse("一个ajax的回复")
进阶Django(一):Django与Ajax相关推荐
- Django 模板中使用 Ajax POST
Django 模板中使用 Ajax POST 解决 Forbidden (CSRF token missing or incorrect.) 报错的解决方案 在以Django作为后端的项目开发中,前端 ...
- python middleware模块_详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击...
一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项 ...
- Django简介Django 各个环境下的安装
目录: Django介绍 Django 全貌 Django 安装 Window 下安装 Django Linux 上安装 Django Mac 下安装 Django介绍 Django 是一个由 Pyt ...
- Django(part1)--Django介绍与安装
学习笔记,仅供参考 文章目录 Django框架 Django框架介绍 安装与卸载 举个例子 Django框架 Django框架介绍 Django框架是采用Python语言编写的开源框架,早期用于新闻和 ...
- django render_(django/flask/bottle)多框架python-restful接口包api-shop
前言: 最近写web接口写得快吐了,写完还得写文档,甚至还得写点测试样本,还要在django和flask之间不断的重复类似的工作,简直不能忍.目前django和flask的restful工具包用着有点 ...
- 【Django】Django Auth认证组件详述
1.Django Auth介绍 官方文档:https://docs.djangoproject.com/en/1.10/topics/auth. Django内置了用户认证系统,处理用户账户.用户组. ...
- 快速上手Django(六) -Django之Django drf 序列化器Serializer类
文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...
- python学习-- django 2.1.7 ajax 请求 进阶版
#原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版 $.get(&qu ...
- ajax 更新页面变量,[Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量
最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...
- Django与CSRF 、AJAX
CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的网络攻击手段,具体内容和含义请大家自行百度. Django为我们提供了防范CSRF攻击的机制. 一.基本使用 ...
最新文章
- 趣谈网络协议笔记-零
- ecs服务器网站文件放在哪里,云服务器ecs文件放哪里
- 讲述一下Tomcat8005、8009、8080三个端口的含义?
- 使用python根据端口号关闭进程
- 荷兰牛栏 荷兰售价_荷兰的公路货运是如何发展的
- Samsung原版44B0X的Bootloader分析
- 脚本修改IIS连接数
- 使用svn进行本地代码管理
- 什么是php的ast结构,什么是AST?Vue源码中AST语法树的解析
- QScrollArea滚动条
- OpenCV图像处理(13)——指定区域截取和指定区域复制
- VC++运行时静默安装
- Android 原生开发、H5、React-Native Flutter 使用利弊和场景技术分享
- 怎样才能容易更换DB
- Castle ActiveRecord学习实践:构建配置信息
- 【运动学】基于matlab GUI最小半径泊车方法仿真【含Matlab源码 690期】
- echarts实现水波球
- 最新仿山楂岛留言源码+公众号吸粉/短视频引流神器
- 陈强老师公开课笔记2——中介效应的原理与检验
- IMAX Enhanced:让沉浸式家庭影音娱乐体验不再抽象
热门文章
- 出战LOL,攻击类常见装备有什么?
- 时间复杂度和空间复杂度的计算方法
- 高仿人人车 范围选择器
- Verdi 改变字体大小额方法
- matlab里butter,matlab中butter函数
- 中国楼市房贷真相:只有傻瓜才自掏腰包!
- java pass can not be_java – 校验和失败:Kerberos / Spring / Active Directory(2008)
- C语言函数大全-- i 开头的函数
- 此主机支持 AMD-V,但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V,或主机自更改此设置后从未重新启动,则 AMD-V 可能被禁用。 (1) 确认 BIOS/固
- 虚拟机无法启动提示give root password for maintenance的多种解决方法