Django的日常-AJAX

AJAX简介

首先AJAX是一种无需重新加载整个网页的前提下,能够更新部分网页的技术,他并不是一种新的编程语言,而是一种使用现有标准的新方法,是基于原生JavaScript开发的,他可以用于创建快速动态网页.

AJAX最大的特点就是局部刷新以及异步提交,局部刷新,顾名思义就是可以在不刷新整个页面的情况下局部刷新,而异步提交就是提交任务之后不需要原地等待任务的返回值,可以继续向下运行,之后通过回调函数来接收到之前提交任务的返回值,效率非常高.

本文并不是从JS来对AJAX做说明,而是从一个相对简单的角度,结合AJAX和jQuery的用法,可以大大简化AJAX本身的代码量,并实现更多的功能,下面我们通过一个实例来说明AJAX和jQuery结合的具体用法.

AJAX与JQ的一个实例

题目如下:写一个前端页面,页面上有两个输入框,在第一个输入框里面输入一个计算式,在第二个输入框里面显示其结果,注意,页面不可以刷新,即不能通过直接赋值刷新页面的方式来做,现在我们就回忆一下怎样从零开始创建一个Django项目,然后一步一步完成这个需求

# 首先,创建一个Django项目,注意,目录名不要带中文,这里我们定义项目名为task,第一个应用名为app01
# 然后,在task/urls.py里面写入
# task/urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', views.home),
]

写好路由之后,我们去views.py里面写方法

# app01/views.py
def home(request):
if request.is_ajax():# 这里判断请求类型是否是AJAX的类型
if request.method == 'POST':# 判断请求method是否是POST
t1 = request.POST.get('t1')# 两个判断都通过的话,取请求的t1的value值,t1是在前端home.html里面起的别名,第一个输入框的id为t1
t1 = eval(t1) # 去引号,因为从前端传过来的是字符串,不能做运算,去引号之后就会变成一个计算式,把计算式直接传给前端就可以计算
return HttpResponse(t1)
return render(request, 'home.html')

然后,我们去templates文件夹下新建一个html文件,命名为home.html,当然,我们要先在头部<head>里导入jQuery

# templates/home.html
<head>
<script src="https://code.jquery.com/jquery-3.4.1.js"
</script>
</head>
<body>
计算式
<br>
<input type="text" id="t1">//这里定义一个输入框,用来输入计算式
<button id="b1">计算</button>//按钮,最简单的就是最实用的,我们可以给一个空白的按钮绑定很多我们需要的功能,这里id设为b1,方便下面AJAX调用 <br>
结果
<br>
<input type="text" id="t2">//定义第二个输入框,用来显示得到的结果 <script>//下面就是AJAX和jQuery的结合使用
$('#b1').on('click', function () {//给按钮绑定一个点击事件,b1是上面定义的button的id
$.ajax({ //下面就是AJAX需要的参数 // 1.向后端地址发数据,不写默认就是朝当前地址提交
url: '', // 2.发送的请求,常用的就是post或get
type: 'post', // 3.发送数据的内容
data: {'t1':$('#t1').val()}, // 4.异步提交的任务 需要通过回调函数来处理,即success就是回调函数,用来接收从后端返回的数据,并做处理
success: function (data) { //这里data就是后端发给前端的异步提交的返回结果
{#alert(data);#}
$('#t2').val(data) //这里给t2输入框赋值,t2是上面给第二个输入框定义的id
}
})
})
</script>
</body>

上面三个文件都写完之后,执行整个项目,就可以得到我们想要的页面以及功能啦.

AJAX与contentType

contentType,英译为内容类型,消息类型,这里也是AJAX的参数之一,其主要作用是前端告诉后端其发送的数据的格式类型.

我们知道form表单提交的数据默认格式是urlencoded,这种类型的特点是什么呢?如下:

username=hello&password=123&age=12就是这种,以键值对的形式,并以&连接起来的方式,就是urlencoded格式的数据,并且django后端会对这种数据格式的数据进行解析,将结果打包放在request.POST里面,我们只需要从request.POST里面就可以得到我们想要的所有信息.

当然我们知道form表单还有另外一种编码格式,就是formdata,定义方式为:

<form action="" enctype="multipart/form-data"></form>,该格式相对于urlencoded不同的地方在于,他不仅可以传平时的数据,还可以用来传文件,但有区别的是,django后端对于formdata的格式类型解析之后,文件类型的数据不会放在request.POST里面,而是放在request.FILES里面,所以我们取数据的时候要注意.

AJAX的默认数据类型其实就是urlencoded格式.

AJAX传json格式

json格式我们都知道,是一种跨平台特别好的数据格式,因为几乎所有语言都会写对接json格式数据的方法,所以跨平台的时候基本都会选择json格式来传输数据,而且,django后端针对json格式的数据不会自动解析,会原封不动的放在request.body里面,这样我们可以原模原样手动取到前端发的数据,不必害怕数据丢失和失真,那么我们使用AJAX怎么把数据格式变成json格式并传输的呢?方法如下:

# home.html
<script>
$('#b1').on('click',function () {
$.ajax({
url:'',
type:'post',
// 1. 告诉后端你当前的数据格式 到底是什么类型,因为我们要转换成json数据,所以就告诉后端我们发的就是json格式数据
contentType:'application/json',
// 2. 这里才是真正的把要传到后端的数据转成json格式,关键字为JSON.stringify({})
data:JSON.stringify({'username':'jason','password':'123'}), success:function (data) {
alert(data)
}
})
})
</script> # 后端在处理json数据的时候,常用以下格式
# views.py
import json
def home(request):
if request.method == 'POST':
json_bytes = request.body # 这里从request.body里面拿出json格式的数据
json_str = str(json_bytes,encoding='utf-8')# 将json格式的数据转换成str字符串类型
json_dict = json.loads(json_str) # 对字符串的数据反序列化,得到真正的json的大字典
print(json_dict,type(json_dict))
return render(request,'index.html')

AJAX传文件

我们知道form表单传输文件的话需要用multipart/form-data格式,那么AJAX如果需要传输文件,也是非常相似的东西,需要用到内置对象Formdata,这个内置对象非常强大,可以传普通的键值,也可以传文件,下面我们就以Formdata为例来看看AJAX的代码怎么写

# home.html

<input type="file" name="myfile" id="t3">
<script>
$('#b1').on('click',function(){
//1. 生成一个FormData对象,方便后面操作
var myFormData = new FormData();
//2. 向生成的对象里面添加普通值
myFormData.append($("#t1").val());
//3. 向生成的对象里面添加文件,其实这里是三步,合并成了一步
//(1).要先通过jQuery查找到该文件的标签
//(2).然后把jQuery对象转换成js对象
//(3).利用原生js对象的方法,直接取到文件的内容
myFormData.append("myfile",$("#t3")[0].files[0]);
$.ajax({
url:'',
type:'post',
data:myFormData, // 直接把前面定义的myFormData对象给data即可
// ajax传文件的时候,一定要指定两个关键性的参数
contentType:false, // 不用任何编码,因为formdata对象自带编码
processData:false, // 告诉浏览器不要处理我的数据,直接发给后端就行
success:function (data) {
alert(data)
}
}) })
</script>

Django的日常-AJAX的更多相关文章

  1. Django中的Ajax

    Ajax 很多时候,我们在网页上请求操作时,不需要刷新页面.实现这种功能的技术就要Ajax!(本人定义,不可迷信) jQuery中的ajax就可以实现不刷新页面就能向后台请求或提交数据的功能,我们仍然 ...

  2. django中的ajax组件

    目录 django中的ajax 向服务器发送请求的途径 Ajax的特点 基于jquery实现的ajax请求 利用ajax实现计算器 利用ajax实现登陆认证 利用form表单进行文件上传 利用ajax ...

  3. Django框架 之 Ajax

    Django框架 之 Ajax 浏览目录 AJAX准备知识 AJAX与XML的比较 AJAX简介 jQuery实现的ajax AJAX参数 AJAX请求如何设置csrf_token 序列化 一.AJA ...

  4. Django中的Ajax详解

    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当 ...

  5. Django如何与ajax通信

    示例一 文件结构 假设你已经创建好了一个Django项目和一个App,部分结构如下: mysite myapp |___views.py |___models.py |___forms.py |___ ...

  6. Django的日常-数据传输

    目录 Django的日常-1 Django中最常用的三个东西 HTTPresponse render redirect 静态文件相关 form表单的get与post 神奇的request 模板的传值方 ...

  7. Django的日常-模型层(2)

    目录 Django的日常-模型层(2) 几种常用的查询方式 聚合查询 分组查询 F和Q查询 查询优化相关 orm中常见字段 choices参数 orm的事务操作 Django的日常-模型层(2) 几种 ...

  8. Django的日常-模型层(1)

    目录 Django的日常-模型层(1) 模型层 django测试环境 ORM查询 Django的日常-模型层(1) 模型层 模型层其实就是我们应用名下的models.py文件,我们在里面写入想要创建的 ...

  9. Django的日常-视图层

    目录 Django的日常-3 JsonResponse form表单上传文件 CBV的源码分析 视图层 模板传值 过滤器 标签 自定义过滤器和标签 Django的日常-3 JsonResponse 在 ...

随机推荐

  1. vue-组件之间的通信:

    组件之间的通信:一个组件被调用,那么里面的数据就需要从前者调用,因为在开发中组件时重复调用的,在页面中会反复使用,但是里面的数据是不一样的,谁调用这个组件谁就传递数据给这个组件,所以就要暴露一些接口, ...

  2. Cstring转char、string、int等数据类型的方法(转载)

    Cstring转char.string.int等数据类型的方法 (-- ::) 转载 标签: 杂谈 分类: VC CString 转char * CString cstr; char *p = (LP ...

  3. Tomcat debug 模式, Application一直reload,导致内存溢出

    在server.xml配置文件中,将reloable改为false.

  4. Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包)

    Tags: Hadoop Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包) Centos7.5安装分布式Hadoop2.6.0+Hbase ...

  5. centos7.4安装kubernetes1.6.0(开启TLS认证)

    目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...

  6. Git 本地仓库管理

    目录 目录 基本概念 配置 配置个人帐号信息 安装 本地版本库 创建 Git 仓库 Git 仓库版本回退 修改管理 基本概念 工作区(Working Directory): 就是你在电脑里能看到的目录 ...

  7. (转)python基础之迭代器协议和生成器(一)

    一 递归和迭代 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  8. Python3实战spark大数据分析及调度✍✍✍

    Python3实战spark大数据分析及调度  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  9. shell 命令 修改文件权限 chmod

    1. 所有者+.-权限 更改那个拥有者的权限 u  表示文件的所有者 g  表示文件所在的组 o  表示其他用户 a  所有,以上三者 增加 / 减少权限 + 表示增加权限 - 表示取消权限 更改具体 ...

  10. flex:1将页面铺满

    代码示范: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...