django 支持ajax6,Django高级-AJAX应用

标签:

预备知识JSON

什么是JSON

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言

JSON 具有自我描述性,更易理解

JavaScript和python的区别

f9dcb80062804d9708cfae63339c485b.png

Django内置的序列化

from django.shortcuts import HttpResponse

from django.core import serializers

from app01 import models

def person(request):

ret = models.Person.objects.all()

ret1 = models.Person.objects.all().values()

print(ret)

print(ret1)

s = serializers.serialize('json', ret)

print(s)

return HttpResponse(s)

发请求的方式

1. 直接在地址栏输入URL回车 GET请求

2. a标签 GET请求

3. form表单 GET/POST请求

4. AJAX GET/POST请求

AJAX特点

特点

1. 异步

2. 局部刷新浏览器(偷偷发请求)

缺点

请求零碎,滥用对服务端压力大

语法

$.ajax({

url: '/check/', // 往哪里发

type: 'post', // 以什么方式发

data: {username: $username}, // 发送的数据

success: function (arg) { // 请求得到相应的时候要执行的

console.log(arg);

$(".e1").text(arg).css('color','red')

}

示例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

AJAX局部刷新实例

+

=

$("#b1").on("click", function () {

$.ajax({

url:"/ajax_add/",

type:"GET",

data:{"i1":$("#i1").val(),"i2":$("#i2").val()},

success:function (data) {

$("#i3").val(data);

}

})

})

ajax_demo1.html

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

from django.shortcuts import render

from django.http import JsonResponse

def ajax_demo1(request):

return render(request, "ajax_demo1.html")

def ajax_add(request):

i1 = int(request.GET.get("i1"))

i2 = int(request.GET.get("i2"))

ret = i1 + i2

return JsonResponse(ret, safe=False)

views.py

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

urlpatterns = [

...

url(r'^ajax_add/', views.ajax_add),

url(r'^ajax_demo1/', views.ajax_demo1),

...

]

urls.py

如何设置csrf_token

方式一

通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。

$.ajax({

url: "/cookie_ajax/",

type: "POST",

data: {

"username": "Q1mi",

"password": 123456,

"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中

},

success: function (data) {

console.log(data);

}

})

方式二

自己写一个js文件获取返回的cookie中的字符串 放置在请求头中发送。

放在/static/

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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;

}

var csrftoken = getCookie('csrftoken');

function csrfSafeMethod(method) {

// these HTTP methods do not require CSRF protection

return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));

}

$.ajaxSetup({

beforeSend: function (xhr, settings) {

if (!csrfSafeMethod(settings.type) && !this.crossDomain) {

xhr.setRequestHeader("X-CSRFToken", csrftoken);

}

}

});

setupajax.js

用到AJAX的请求方式为post时候,提前导入一下文件即可

标签:

来源: https://www.cnblogs.com/sunch/p/9750275.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值