Django框架详细介绍---AJAX

一、概述

1.什么是JSON

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言 *
  • JSON 具有自我描述性,更易理解

  JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言

图示:JavaScript与Python间JSON支持的数据类型以及相应转换关系

示例:

  真确的Json对象

# 字符串,列表字符串元素、字典中的索引以及字符串值必须是使用双引号
["zh", "man"]
{ "name": "zh", "gender":  "man", "age": 18 }

  错误的数写方式以及Json不支持的对象

{ name: "zh", "age": 18}                      // 属性名必须使用双引号
["zh", 18, 0xFFF]                            // 不能使用十六进制值
{ "name": "zh", "age": undefined }                // 不能使用undefined
{ "name": "zh",
  "birthday": new Date(‘Fri, 26 Aug 2011 07:13:10 GMT‘),
  "getName":  function() {return this.name;}          // 不能使用函数和日期对象    

  JavaScript中JSON的使用

var str = ‘{"name": "zh", "age": 18}‘
// 将JSON字符串转化成JavaScript对象
var json_str = JSON.parse(str)
// 将JavaScript对象转化成JSON字符串
var str2 = JSON.stringify(json_str)

2.JSON和XML比较

  JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁琐笨重的 XML 格式,JSON 格式有两个显著的优点:书写简单,一目了然;符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码,因此,JSON迅速被接受,已经成为各大网站交换数据的标准格式

   JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用得带宽

<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>黑龙江</name>
        <cities>
            <city>哈尔滨</city>
            <city>大庆</city>
        </cities>
    </province>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台湾</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>

XML格式数据

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

JSON格式数据

3.什么是AJAX

  AJAX(Asynchronous Javascript And XML),全称:“异步的Javascript和XML”,即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML),它不是新的编程语言,而是一种使用现有标准的新方法

  AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

  AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行:

    •   同步交互,客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求
    •   异步交互,客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求

二、应用

1.常见应用

  搜索引擎中输入关键字,自动弹出提示与关键字相关的条目

  注册页面,输入注册的用户名时,网页会自动将当前输入的用户名发送到后端进行重复性校验

  以上过程就是通过AJAX技术,监测用户与浏览器交互时,通过AJAX向服务端提交交互信息,然后服务端进行结果响应等,前端再将返回的结果进行展示,但是在整个过程中页面并没有重新加载

2.在AJAX请求中设置csrf_token

  官方文档:

https://docs.djangoproject.com/en/1.11/ref/csrf/

  方法一:获取隐藏在input标签中的csrfmiddlewaretoken值,并直接添加到AJAX请求的data中发送出去


$.ajax({url: "/auth/login/",type: "POST",data: {    username: $("#id_username").val(),    password: $("#id_password").val(),    // 用JQuery取出csrfmiddlewaretoken的值,添加到data中    csrfmiddlewaretoken:         $("[name = ‘csrfmiddlewaretoken‘]").val(),},success: function (data) {    // 判断传过来的data字典里的code是 0 还是 1    // 是 0 说明认证成功以及输入的验证码正确    if (!data.code) {        location.href = data.data;    }    // 是 1 说明认证失败或者输入的验证码错误    else {        // 有错误        $("#login-error").text(data.data);    }},});

  方法二:从返回的cookie中获取csrftoken值,并该值添加到AJAX的请求头中

强调:该方法需要调用jquery.cookie.js插件

<script src="/static/jquery.cookie.js"></script>

$.ajax({
url: "/auth/login/",
type: "POST",
// 从cookie取csrf_token,并添加到AJAX请求头
headers: {"X-CSRFToken": $.cookie(‘csrftoken‘)},
data: {
    username: $("#id_username").val(),
    password: $("#id_password").val(),
},
success: function (data) {
    // 判断传过来的data字典里的code是 0 还是 1
    // 是 0 说明认证成功以及输入的验证码正确
    if (!data.code) {
        location.href = data.data;
    }
    // 是 1 说明认证失败或者输入的验证码错误
    else {
        // 有错误
        $("#login-error").text(data.data);
    }
},
});

  方法三:使用$.ajaxSetup()方法统一设置AJAX请求,同时为提高页面的可读性可将该方法写入js文件中直接导入

<!-- 引入Ajax文件 -->
<script src="/static/setupAjax.js"></script>

  js文件内容

// 自定义从cookie中获取csrftoken的方法
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) {
    // 如果发送的是POST请求则设置请求头,添加  CSRFToken
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
  }
});

3.示例

  登录页面设计,当光标停留在输入用户名的input框时,不断通过AJAX向后端提交当前输入的用户名,后端进行校验该用户是否存在并返回响应

// 检测用户输入的用户名,一旦存在输入就发送到后端校验用户是否存在$("#id_username").on("input", function () {    $("#check-user").text("");    var username = $(this).val();    $.ajax({        url: "/auth/check_user/",        type: "POST",        data: {            username: username,        },        success: function (data) {            if (data.code){                // 用户已存在                $("#check-user").text("用户已存在");            }        }    })});

补充知识:

  1) Django内置的序列化serializers

  2)SweetAler插件

https://lipis.github.io/bootstrap-sweetalert/

原文地址:https://www.cnblogs.com/mdzzbojo/p/9255329.html

时间: 2024-11-09 00:31:55

Django框架详细介绍---AJAX的相关文章

Django框架详细介绍

Django视图系统 1.什么是视图 在Django中,一个视图函数/类,称为视图.实质就是一个用户自定义的简单函数,用来接收WEB请求并xing响应请求,响应的内容可以是一个HTML文件.重定向.一个文件.照片等.无论视图本身包含什么逻辑,都要返回响应. 一般的,视图函数一般存放于用户创建的APP目录下的views.py中. 2.视图种类 1)FBV FBV(function base views),全称基于函数的视图,也就是在视图中使用函数处理请求, 函数内部再定义如何处理GET.POST等

Django框架详细介绍---ORM相关操作---select_related和prefetch_related函数对 QuerySet 查询的优化

Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 引言 在数据库存在外键的其情况下,使用select_related()和prefetch_related()很大程度上减少对数据库的请求次数以提高性能 1.实例准备 模型: from django.db import models # Create your models here. # 书 class Book(models.Model): title = models.C

Django框架详细介绍---request对象

几个重要的函数 1.HttpRequest.get_host() 根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_HOST 头部信息返回请求的原始主机.如果这两个头部没有提供相应的值,则使用SERVER_NAME 和SERVER_PORT,在PEP 3333 中有详细描述 USE_X_FORWARDED_HOST是一个布尔值,用于指定是否优先使用 X-Forwarded-Host 首部,仅在代理设置了该首部的情况

Django框架详细介绍---模板系统

Django模板系统 官方文档: https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#std:templatetag-for 1.常见语法 两种页数符号 {{}} {% %} 1)变量 变量名由字母.数字.下划线组成:模板语言中用点"."来获取相应的属性 {{变量名}} 模板支持的写法: {# 取列表中的的第x个参数 #} {{ 列表.x }} {# 取字典中key的值 #} {{ 字典.key }} {# 取对象

Django - Django框架 简单介绍

Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码的Web应用框架, 由Python写成. 採用了MVC的软件设计模式, 即模型M, 视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的站点的, 并于2005年7月在BSD许可证下公布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的.

django框架基本介绍

一.mvc和mtv 1.mvc介绍 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. 想要更详细的了解MVC模式? >> 点我 Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性. Django框架的不同之处在于它拆分的三部分为:Model(模型).Template(模

Django框架基础之ajax

对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要重新加载全局数据 2.AJAX AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步的JavaScript:使用 [JavaScript语言] 以及 相关[浏览器提供类库] 的功能向服务端发送请求

Django框架开发-基于Ajax实现的登录

---恢复内容开始--- 一.需要知道的新知识点 1.刷新验证码,给src属性加一个?号.加个?会重新去请求 # 给验证码刷新 $(".vialdCode_img").click(function () { 方式一:dom方法 $(this)[0].src+="?"#} 方式二:jQuery的attr方法 $(this).attr("src",$(this).attr("src")+'?') }) }) 2.当登录成功跳转,或

linux 时钟源初步分析linux kernel 时钟框架详细介绍

初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB总线上的设备(watchdog.IIS.i2c. pwm.定时器.ADC.uart.gpio.rtc.spi) 上电时 fclk的时钟等于外部时钟fin, 然后等待LOCKTIME后, 依照MPLLCON寄存器的设置,倍频到高频. UPLLCON专用于USB同于MPLLCON. 关于分频: CLKD