目录

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)将返回的数据直接写入DOMHTTP方式由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相关推荐

  1. Django 模板中使用 Ajax POST

    Django 模板中使用 Ajax POST 解决 Forbidden (CSRF token missing or incorrect.) 报错的解决方案 在以Django作为后端的项目开发中,前端 ...

  2. python middleware模块_详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击...

    一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项 ...

  3. Django简介Django 各个环境下的安装

    目录: Django介绍 Django 全貌 Django 安装 Window 下安装 Django Linux 上安装 Django Mac 下安装 Django介绍 Django 是一个由 Pyt ...

  4. Django(part1)--Django介绍与安装

    学习笔记,仅供参考 文章目录 Django框架 Django框架介绍 安装与卸载 举个例子 Django框架 Django框架介绍 Django框架是采用Python语言编写的开源框架,早期用于新闻和 ...

  5. django render_(django/flask/bottle)多框架python-restful接口包api-shop

    前言: 最近写web接口写得快吐了,写完还得写文档,甚至还得写点测试样本,还要在django和flask之间不断的重复类似的工作,简直不能忍.目前django和flask的restful工具包用着有点 ...

  6. 【Django】Django Auth认证组件详述

    1.Django Auth介绍 官方文档:https://docs.djangoproject.com/en/1.10/topics/auth. Django内置了用户认证系统,处理用户账户.用户组. ...

  7. 快速上手Django(六) -Django之Django drf 序列化器Serializer类

    文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...

  8. python学习-- django 2.1.7 ajax 请求 进阶版

    #原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版  $.get(&qu ...

  9. ajax 更新页面变量,[Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量

    最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...

  10. Django与CSRF 、AJAX

    CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的网络攻击手段,具体内容和含义请大家自行百度. Django为我们提供了防范CSRF攻击的机制. 一.基本使用 ...

最新文章

  1. 趣谈网络协议笔记-零
  2. ecs服务器网站文件放在哪里,云服务器ecs文件放哪里
  3. 讲述一下Tomcat8005、8009、8080三个端口的含义?
  4. 使用python根据端口号关闭进程
  5. 荷兰牛栏 荷兰售价_荷兰的公路货运是如何发展的
  6. Samsung原版44B0X的Bootloader分析
  7. 脚本修改IIS连接数
  8. 使用svn进行本地代码管理
  9. 什么是php的ast结构,什么是AST?Vue源码中AST语法树的解析
  10. QScrollArea滚动条
  11. OpenCV图像处理(13)——指定区域截取和指定区域复制
  12. VC++运行时静默安装
  13. Android 原生开发、H5、React-Native Flutter 使用利弊和场景技术分享
  14. 怎样才能容易更换DB
  15. Castle ActiveRecord学习实践:构建配置信息
  16. 【运动学】基于matlab GUI最小半径泊车方法仿真【含Matlab源码 690期】
  17. echarts实现水波球
  18. 最新仿山楂岛留言源码+公众号吸粉/短视频引流神器
  19. 陈强老师公开课笔记2——中介效应的原理与检验
  20. IMAX Enhanced:让沉浸式家庭影音娱乐体验不再抽象

热门文章

  1. 出战LOL,攻击类常见装备有什么?
  2. 时间复杂度和空间复杂度的计算方法
  3. 高仿人人车 范围选择器
  4. Verdi 改变字体大小额方法
  5. matlab里butter,matlab中butter函数
  6. 中国楼市房贷真相:只有傻瓜才自掏腰包!
  7. java pass can not be_java – 校验和失败:Kerberos / Spring / Active Directory(2008)
  8. C语言函数大全-- i 开头的函数
  9. 此主机支持 AMD-V,但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V,或主机自更改此设置后从未重新启动,则 AMD-V 可能被禁用。 (1) 确认 BIOS/固
  10. 虚拟机无法启动提示give root password for maintenance的多种解决方法