django中使用Ajax
内容:
1.Ajax原理与基本使用
2.Ajax发送get请求
3.Ajax发送post请求
4.Ajax上传文件
5.Ajax设置csrf_token
6.django序列化
参考:https://www.cnblogs.com/liwenzhou/p/8718861.html
1.Ajax原理与基本使用
关于Ajax的原理及其基本使用,直接看这篇博文即可:https://www.cnblogs.com/wyb666/p/9387488.html
2.Ajax发送get请求
views.py:
# Ajax get请求的后端处理函数
def ajax_add(request):
print(request.GET)
print(request.GET.get("i1"))
print(request.GET.get("i2")) i1 = int(request.GET.get("i1"))
i2 = int(request.GET.get("i2")) ret = i1 + i2
return HttpResponse(ret)
前端代码:
1 <input type="text" id="i1">+
2 <input type="text" id="i2">=
3 <input type="text" id="i3">
4 <input type="button" value="AJAX get提交" id="b1">
5
6 <script src="/static/jquery-3.3.1.js"></script>
7 <script>
8 $("#b1").on("click", function () {
9 var i1 = $("#i1").val()
10 var i2 = $("#i2").val()
11 // 往后端发数据
12 $.ajax({
13 url: "/ajax_add/",
14 type: "get",
15 data: {"i1": i1, "i2": i2},
16 success: function (arg) {
17 {#alert(arg);#}
18 // 把返回的结果填充到 id是i3的input框中
19 $("#i3").val(arg)
20 }
21 })
22 })
23 </script>
3.Ajax发送post请求
views.py:
# Ajax post请求的后端处理函数
def ajax_add3(request):
print(request.POST)
print("-" * 120)
i1 = int(request.POST.get("i1"))
i2 = int(request.POST.get("i2")) ret = i1 + i2
return HttpResponse(ret)
前端代码:
<input type="text" id="i1">+
<input type="text" id="i2">=
<input type="text" id="i3">
<input type="button" value="AJAX post提交" id="b3"> <script src="/static/jquery-3.3.1.js"></script>
<script src="/static/setupajax.js"></script>
<script>
$("#b3").on("click", function () {
var i1 = $("#i1").val()
var i2 = $("#i2").val()
// 往后端发数据
$.ajax({
url: "/ajax_add3/",
type: "post",
data: {"i1": i1, "i2": i2},
success: function (arg) {
{#alert(arg);#}
// 把返回的结果填充到 id是i3的input框中
$("#i3").val(arg)
}
})
})
</script>
4.Ajax上传文件
// 上传文件示例
$("#b1").click(function () {
var formData = new FormData();
formData.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
formData.append("f1", $("#f1")[0].files[0]);
$.ajax({
url: "/upload/",
type: "POST",
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
data: formData,
success:function (data) {
console.log(data)
}
})
})
5.Ajax设置csrf_token
(1)通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送
$.ajax({
url: "/cookie_ajax/",
type: "POST",
data: {
"username": "xxx",
"password": 123456,
// 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中
"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val()
},
success: function (data) {
console.log(data)
}
})
(2)通过获取返回的cookie中的字符串 放置在请求头中发送
// 引入一个jquery.cookie.js插件,然后写以下代码:
$.ajax({
url: "/cookie_ajax/",
type: "POST",
// 从Cookie取csrftoken,并设置到请求头中
headers: {"X-CSRFToken": $.cookie('csrftoken')},
data: {"username": "xxx", "password": 123456},
success: function (data) {
console.log(data);
}
})
或者这样(推荐这样写):
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
// 在cookie中获取csrftoken
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
// 为每次Ajax请求之前执行该函数
// 只要在使用Ajax的地方之前导入即可
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
注:
如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。
如果你的视图渲染的HTML文件中没有包含 {% csrf_token %},Django可能不会设置CSRFtoken的cookie。
这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie:
django.views.decorators.csrf import ensure_csrf_cookie @ensure_csrf_cookie
def login(request):
pass
6.django序列化
(1)什么是序列化
序列化:将字符串转换成json格式的数据便于后端将数据发送给前端处理
(2)django序列化
使用django内置的serializers进行序列化:
from django.core import serializers def books_json(request):
book_list = models.Book.objects.all()[0:10]
ret = serializers.serialize("json", book_list)
return HttpResponse(ret)
django中使用Ajax的更多相关文章
- Django中的Ajax
Ajax 很多时候,我们在网页上请求操作时,不需要刷新页面.实现这种功能的技术就要Ajax!(本人定义,不可迷信) jQuery中的ajax就可以实现不刷新页面就能向后台请求或提交数据的功能,我们仍然 ...
- django中的ajax组件
目录 django中的ajax 向服务器发送请求的途径 Ajax的特点 基于jquery实现的ajax请求 利用ajax实现计算器 利用ajax实现登陆认证 利用form表单进行文件上传 利用ajax ...
- Django中的Ajax详解
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当 ...
- django中给ajax提交加上csrf
代码来自djangoproject网站 在html中的script标签下插入下面代码 在html文档加载时候运行下面代码,并且使用$.ajaxSetup设置ajax每次调用时候传入的数据,$.ajax ...
- django 中的 ajax
(Asynchronous Javascript And XML ) 特点: 异步 页面局部刷新 传递的数据量小 ajax 请求返回数据 重定向 location.href='/index/' 发请求 ...
- django中的Ajax文件上传
主要介绍两个 1.ajax文件上传 2.写路由器 3.创建对应的函数 4.file_put.html代码 <!DOCTYPE html> <html lang="en&qu ...
- django中使用AJAX时如何获取表单参数(按钮携带参数)
前提是函数和相应的视图路由都已经配置好了,然后就是表单了: <form id="SmsForm" method="post" class="a& ...
- Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',
1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...
- Django中关于“CSRF verification failed. Request aborted”的问题
遇到该问题的情境 在Django中采用Ajax提交表单,涉及到跨域问题. 解决措施 在html页面中的表单内添加如下代码: {% csrf_token %} 在视图函数所在的py文件中添加如下代码: ...
随机推荐
- putc,fputc,和putchar
putc()功能和fputc()差不多,一个是宏,一个是函数 putc(int ch,FILE *fp),即将字符ch输出到fp所指的文件中:putchar(char ch),即将字符ch输出到标准输 ...
- 使用git错误日志
错误日志 pull错误 将远程仓库内容pull下来的过程中,碰到了拒绝合并两个不相关的历史,所以无法下载,同样的也无法push 但是我的东西明明是从组织里克隆下来的,只是做了一些修改 后来我我尝试不替 ...
- 2017年最新cocoapods安装教程(解决淘宝镜像源无效以及其他源下载慢问题)
首先,先来说一下一般的方法吧,就是把之前的淘宝源替换成一个可用的的源: 使用终端查看当前的源 gem sources -l gem sources -r https://rubygems.org/ # ...
- Hadoop操作前准备工作
摘要:本文介绍Hadoop操作前的准备工作. 关键词:Hadoop Linux JDK WinSCP 俗语说,“磨刀不误砍柴工”.Hadoop操作前的准备工作可以加快Hadoop的操作与应用. ...
- WPF控件NumericUpDown (转)
WPF控件NumericUpDown示例 (转载请注明出处) 工具:Expression Blend 2 + Visual Studio 2008 语言:C# 框架:.Net Framework 3. ...
- 龙儿经理嘴上经常说的B树
国内的数据结构教材一般是按照Knuth定义,即“阶”定义为一个节点的子节点数目的最大值. 对于一棵m阶B-tree,每个结点至多可以拥有m个子结点.各结点的关键字和可以拥有的子结点数都有限制 规定m阶 ...
- 一张方便的graphql schema 语言手册
参考资料 https://github.com/sogko/graphql-schema-language-cheat-sheet
- 2018第52周日&技术人员如何面对裁员?
2018的最后一周,看了汽车的两个趋势,纯电动车和自动驾驶,两个现在很火但还有很多问题要解决的方向,尤其是自动驾驶.虽然它因为一些问题当前不能完全被克服,但因它而生的各种辅助驾驶技术却被用的越来越多, ...
- JVM内存模型(一)
主要澄清之前对JVM内存模型的一些误区: JMV内存主要分为5块:方法区(Method Area),堆区(Heap),虚拟机栈(VM stack),本地方法栈(Native Method stack) ...
- bzoj 4772 显而易见的数论——拆分数(五边形数定理)+线性筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4772 题解:https://blog.csdn.net/Dream_Lolita/artic ...