django Ajax介绍
1.Ajax技术
认识ajax之前必须先了解json模块,json(Javascript Obiect Notation,JS对象标记)属于一种轻量级的数据交换格式
json的格式来源于js的格式,也可以说json是js的一个子集
json只认双引号的,它一定是一个字符串
1.1 js下的序列化和反序列化
JSON.stringify():用于将一个JavaScript对象转换为JSON字符串
JSON.parse():用于将一个JSON字符串转换为JavaScript对象
<script>
//===========js中的json序列化===========
s = '{"name":1}';
var data = JSON.parse(s);
console.log(data);
console.log(typeof data); //object
//===========js中的json的反序列化=======
s2={'name':'yuan'};
console.log(JSON.stringify(s2),typeof JSON.stringify(s2)) //string
</script>
1.2 ajax介绍
前端向后端发送数据的方式:
GET:地址栏、a标签、Form表单
POST:Form表单
ajax:也是前端向后端发送数据的一种方式。
AJAX(Asynchronous Javascript And XML),中文就是“异步Javascript和XML”
- 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
- 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
Ajax的特点:
异步交互: 当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应!
局部刷新: 整个过程中页面没有刷新,只是刷新页面中的局部位置而已!
应用场景:
百度搜索,输入某个字或内容时,我们并没有提交请求,但是搜索栏会出现与你输入的内容相关的下拉列表,这就使用了ajax技术。整个过程中页面没有刷新,只是刷新页面中的局部位置而已!
1.3 基于jquery应用下的ajax
应用一:
通过点击按钮实现局部刷新,显示出结果6666
Index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
</head>
<body>
{#简单应用#}
<button class="btn">click</button>
<p class="con"></p> <script>
$(".btn").click(function(){
//发送ajax请求
$.ajax({
url:"/eleven/",
type:"get",
// 形参data参数必须要传,它其实就是response返回的值
success:function (data) {
$(".con").html(data);
}
})
});
</script> </body>
</html>
views.py
def index(request):
return render(request,"index.html") def eleven(request):
return HttpResponse(6666)
urls.py
path("index/",views.index),
path("eleven/",views.eleven),
点击click最终效果:(这个效果并没有全局刷新,而是点击后局部刷新得到的)
应用二:
在url页面按钮框输入数字实现加法运算
这里我不一一例了,只用把案例一index.thml中输入部分和jquery部分换掉即可
index.html
{#计算#}
<input type="text" class="n1"> + <input type="text" class="n2"> =<input type="text" class="n3">
<button class="cal">计算</button>
{% csrf_token %} //携带参数进行请求,获取的n1,n2就是我们在浏览器输入的值。data里面的值传给了视图函数
$(".cal").click(function () {
var n1 = $(".n1").val();
var n2 = $(".n2").val(); $.ajax({
url: /cal/,
type: "post",
data: {
a: n1,
b: n2,
csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
},
success: function (data) {
console.log(data);
$(".n3").val(data);
} })
});
views.py
def cal(request):
a = request.POST.get("a")
b = request.POST.get("b")
res = int(a) + int(b)
return HttpResponse(str(res))
urls.py
path("index/",views.index),
path("cal/", views.cal),
应用三:
实现登录验证功能
form表单已经不用再定义是什么请求,这一步都在ajax中实现
{#用户验证#}
<form action="">
用户名 <input type="text" id="user">
密码 <input type="password" id="pwd">
<input type="button" value="submit" id="login_btn"><span class="error"></span>
</form> // 登录验证
$("#login_btn").click(function () {
$.ajax({
url: "/login/",
type: "post",
data: {
user: $("#user").val(),
pwd: $("#pwd").val(),
csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
},
// 这里关键是视图函数返回的data的数据类型
success: function (data) {
console.log(data);
console.log(typeof data);
var data = JSON.parse(data);
console.log(data);
console.log(typeof data); if (data.user) {
}
// if(user),表明成功,失败了对传过来的文本修改颜色
else {
$(".error").text(data.msg).css({"color": "red", "margin-left": "20px"})
setTimeout(function(){
setTimeout(function(){
$(".error").text("")
},1000)
}
}
})
});
views.py
from book.models import User
import json
def login(request):
# 先要从数据库导入相关个人账号和密码
user = request.POST.get("user")
pwd = request.POST.get("pwd")
# 获取账号和密码
user_obj = User.objects.filter(user=user, pwd=pwd).first()
response = {"user": None, "msg": None}
if user_obj:
response["user"] = user_obj.user
else:
response["msg"] = "用户名或者密码不一致"
# 确保dumps的数据编码一致性
return HttpResponse(json.dumps(response, ensure_ascii=False))
models.py
class User(models.Model):
user = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
urls.py
path("index/",views.index),
path("login/", views.login),
效果:
1.4 csrf跨站请求伪造
一般会由于这个问题报一个Fororbidden的错,自己在ajax下的data中组装一组键值对即可解决
<form>
{% csrf_token %}
</form>
data:{
csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),
name:$(":text").val(),
pwd:$(":password").val()
},
django Ajax介绍的更多相关文章
- Django ajax MYSQL Highcharts<1>
Another small project with django/Ajax/Mysql/Highcharts. 看下效果图 - delivery dashboard .嘿嘿 是不是还蛮好看的. 废 ...
- django ajax练习
这几天遇到了django ajax请求出错的问题,总结一下 前端js:我这里创建的是一个字典格式的数据,前端js收到字典之后也是要用字典的形式去解包后台传送过来的数据,比如我下面的写法:data['s ...
- Django 框架介绍
Django 框架介绍 MVC框架和MTV框架 简单了解一下什么是MVC框架.MVC(Model View Controller),是模型(model)-视图(view)-控制器(controller ...
- 关于Django Ajax CSRF 认证
CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的 ...
- 第三百零三节,Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- Django详细介绍
课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...
- 一 Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- Django 01 django基本介绍及环境搭建
Django 01 django基本介绍及环境搭建 #http服务器 #用来接收用户请求,并将请求转发给web应用框架进行处理 #Web应用框架 #处理完请求后在发送给http服务器,http服务器在 ...
随机推荐
- how to use Eclipse with Maven
install Eclipse LUNA; download and unzip Maven; Eclipse=>window=>preference=>maven=>inst ...
- [API]API运用实例
首先,在百度API:http://apistore.baidu.com/查找自己想用的api接口,例如:翻译: 利用postman工具进行测试: 返回结果为JSON字符串: { "errNu ...
- MSSql中profiler工具介绍,
第一次使用profiler感觉真的是很方便. 他的作用可能有很多,但是我只是简单其中一点,就是查看某一时刻数据库执行了哪些操作,执行了哪些语句,执行语句所花费的时间.都可以很方便的查到,这对于我们优化 ...
- 利用DOS命令做伪装成图片的压缩包,看上去是图片其实是个压缩包用2条命令即搞定
在很多地方我们看到一张图片,然后把这张图片下载到本地,改后缀名为xx.rar,即变成了压缩包. 比如下面这个图片:(把以下图片保存到本地,后缀名xx.png 改为 xx.rar,解压试试) 怎么样,是 ...
- Python高级数据类型
除了python中默认提供的几种基本数据类型 collections模块还提供了几种特别好用的类型! 1.Conters //计数器 2.Orderdict // 有序字典 3.defalutdict ...
- Windows之CMD查看系统信息
Windows 系统通过命令行(CMD)查询系统信息有两种方式: 1.图形化界面: 在“运行”中键入CMD,然后输入 dxdiag,回车后弹出图形化界面 ------ DirectX 诊断工具. 2. ...
- css清除浮动的原理
最近学习css发现了高度塌陷时候要清除浮动,为了理解清楚浮动原理,网上找了不少资料,发现都写的不是很清楚,而且都是一模一样的内容,我在里分享一下我对清楚浮动原理的理解, 如果你已经很了解什么是浮动和浮 ...
- vue打包后CSS中引用的背景图片不显示问题
vue项目中,在css样式中引用了一张背景图片,开发环境下是可以正常显示,build之后背景图片不显示. 解决方法: 找到build/utils.js文件 修改成为如下所示内容: 添加红框中的内容即 ...
- 【起航计划 023】2015 起航计划 Android APIDemo的魔鬼步伐 22 App->Menu->Inflate from XML 使用xml资源展示菜单
本例MenuInflateFromXml.java演示了如何从Menu 资源(XML 定义)展开菜单项.这个例子的onCreate 采用了使用代码来创建Activity 界面的方法 而通常的方法是采用 ...
- 【MATLAB】产生FPGA中ROM需要的余弦表
产生的二进制数为带符号二进制数,最高位是符号位. function [ DATA ] = cos_gen( Num_addr,Num_out ) % 用来产生ROM需要的余弦表,输出为有符号二进制数 ...