内容:

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的更多相关文章

  1. Django中的Ajax

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

  2. django中的ajax组件

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

  3. Django中的Ajax详解

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

  4. django中给ajax提交加上csrf

    代码来自djangoproject网站 在html中的script标签下插入下面代码 在html文档加载时候运行下面代码,并且使用$.ajaxSetup设置ajax每次调用时候传入的数据,$.ajax ...

  5. django 中的 ajax

    (Asynchronous Javascript And XML ) 特点: 异步 页面局部刷新 传递的数据量小 ajax 请求返回数据 重定向 location.href='/index/' 发请求 ...

  6. django中的Ajax文件上传

    主要介绍两个 1.ajax文件上传 2.写路由器 3.创建对应的函数 4.file_put.html代码 <!DOCTYPE html> <html lang="en&qu ...

  7. django中使用AJAX时如何获取表单参数(按钮携带参数)

    前提是函数和相应的视图路由都已经配置好了,然后就是表单了: <form id="SmsForm" method="post" class="a& ...

  8. Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',

    1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...

  9. Django中关于“CSRF verification failed. Request aborted”的问题

    遇到该问题的情境 在Django中采用Ajax提交表单,涉及到跨域问题. 解决措施 在html页面中的表单内添加如下代码: {% csrf_token %} 在视图函数所在的py文件中添加如下代码: ...

随机推荐

  1. iPhone/iPad被停用怎么办 3招轻松解锁

    家中小孩玩电脑游戏,自己拿了iPad,随便输入密码,结果造成平板电脑无法使用,相信这是许多家长都将面对或是早已发生的事情.本文整理当iPhone或是iPad被停用时的处理方法. iPhone被停用 为 ...

  2. HDU - 2475:Box(splay维护森林)

    There are N boxes on the ground, which are labeled by numbers from 1 to N. The boxes are magical, th ...

  3. 不要使用 Dispatcher.Invoke,因为它可能在你的延迟初始化 Lazy 中导致死锁

    WPF 中为了 UI 的跨线程访问,提供了 Dispatcher 线程模型.其 Invoke 方法,无论在哪个线程调用,都可以让传入的方法回到 UI 线程. 然而,如果你在 Lazy 上下文中使用了 ...

  4. L3-020 至多删三个字符 (30 分)

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1] 内的字符串. 输 ...

  5. test20180830

    所有试题限制均为128MB,1Sec 总分100(•́へ•́╬). 试题一 A题 问题描述: Bob 有 n 个士兵,他们排成一列按照从左到右编号为 1 到 n,每个士兵都有自己的 IQ 值,Bob ...

  6. test20180829

    试题限制均为128MB,1Sec 总分150. 试题一 A题 问题描述: 小A得到了一棵美丽的有根树.这棵树由n个节点以及n - 1条有向边构成,每条边都从父亲节点指向儿子节点,保证除了根节点以外的每 ...

  7. GridControl 之 BandedGridView

    https://documentation.devexpress.com/#WindowsForms/clsDevExpressXtraGridViewsBandedGridBandedGridVie ...

  8. 使用gitblit搭建一个简单的局域网服务器

    使用gitblit搭建一个简单的局域网服务器 1.使用背景 现在很多使用github管理代码,但是github需要互联网的支持,而且私有的git库需要收费.有一些项目的代码不能外泄,所以,搭建一个局域 ...

  9. JQuery 在网页中查询

    最近遇到客户的一个需求,要在网页中添加一个Search 功能,其实对于网页的搜索,Ctrl+F,真的是非常足够了,但是客户的需求,不得不做,这里就做了个关于Jquery Search function ...

  10. 【转】每天一个linux命令(39):grep 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表 ...