Python自动化开发 - AJAX

一  AJAX预备知识:json进阶

1.1 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

JSON是用字符串来表示Javascript对象

json字符串就是js对象的一种表项形式(字符串的形式)  

Python中有json模块,来测试一下json字符串和json对象到底是什么

import json

i = 10
s = "hello"
t = (1, 4, 6)
l = [3, 5, 7]
d = {‘name‘: ‘Linda‘}

json_str1 = json.dumps(i)
json_str2 = json.dumps(s)
json_str3 = json.dumps(t)
json_str4 = json.dumps(l)
json_str5 = json.dumps(d)

print("json_str1: %s, and type is :%s" % (json_str1, type(json_str1)))
print("json_str2: %s, and type is :%s" % (json_str2, type(json_str2)))
print("json_str3: %s, and type is :%s" % (json_str3, type(json_str3)))
print("json_str4: %s, and type is :%s" % (json_str4, type(json_str4)))
print("json_str5: %s, and type is :%s" % (json_str5, type(json_str5)))

里面的json_str就是json字符串,那么json字符串可以放哪些值呢?

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true或false)
  • 数组(在方括号[xx, xx]中)
  • 对象(在花括号{"xx":xx,引号用双引号})
  • null

其实就是js的数据对象。不管是Python还是其他语言,都有自己的数据类型,如果要处理成json字符串,

就要把数据转换成js对应的数据对象(比如Python的元组就处理成数组,字典就被处理成object),再加上引号就是json字符串

前端接收到json字符串,就可以通过JSON.parse()等方法解析成json对象(即js对象),直接使用就行

之所以称json对象为js的子集,是因为像undefined,NaN,{‘name‘:‘yuan‘}等都不在json对象的范畴。

1.2 Python与JSON对象的对应

   python         -->        json
        dict                      object
        list,tuple                array
        str,unicode               string
        int,long,float            number
        True                      true
        False                     false
        None                      null

一个带方法的json对象,person就是一个json对象,满足json规范

<script>
    var person = {
        "name": "alex",
        "sex": true,
        "teacher":{
            "name":"egon",
            "sex": false
        },
        "hobby":[‘running‘,‘basketball‘],
        "getAge":function () {
            return 80;
        }
    };

    alert(person.name);
    alert(person.getAge());
    alert(person.teacher.name);
    alert(person.hobby[0]);
</script>

1.3 JSON.parse()和JSON.stringify()

parse() 用于从一个json字符串中解析出json对象,如

var str = ‘{"name":"linda","age":"23"}‘

结果:JSON.parse(str)     ------>  Object  {age: "23",name: "linda"}

stringify()用于从一个json对象解析成json字符串,如

var c= {a:1,b:2} 

结果:  JSON.stringify(c)     ------>      ‘{"a":1,"b":2}‘

注意1:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
注意2:

a={name:"linda"};   //ok
b={‘name‘:‘linda‘}; //ok
c={"name":"linda"}; //ok

alert(a.name);  //ok
alert(a[name]); //undefined
alert(a[‘name‘]) //ok

1.4 Django向JS发送数据

def login(request):
    obj={‘name‘:"alex111"}
    return render(request,‘index.html‘,{"objs":json.dumps(obj)})
#----------------------------------
 <script>
     var temp={{ objs|safe }}
     alert(temp.name);
     alert(temp[‘name‘])
 </script>

此外,还可以通过下面介绍的ajax技术使js接受django相应的json数据。

1.5 JSON与XML比较

  • 可读性: XML胜出;
  • 解码难度:JSON本身就是JS对象(主场作战),所以简单很多;
  • 流行度: XML已经流行好多年,但在AJAX领域,JSON更受欢迎。

注解:其实本没什么json对象,只是我们自己这么称呼罢了,所谓的json数据就是指json字符串,在前端解析出来的对象就是js对象的一部分!

二  什么是AJAX

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。

即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

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

AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6
 7 <script type="text/javascript">
 8 window.onload = function() {//当文档加载完毕时执行本函数
 9     var form = document.getElementById("form1");//获取表单元素对象
10     form.onsubmit = function() {//给表单元素添加一个监听,监听表单被提交事件
11         var usernameValue = form.username.value;//获取表单中名为username的表单元素值
12         if(!usernameValue) {//判断该值是否为空
13             var usernameSpan = document.getElementById("usernameSpan");//得到usernmae元素后的<span>元素
14             usernameSpan.innerText = "用户名不能为空!";//设置span元素内容!
15             return false;//返回false,表示拦截了表单提交动作
16         }
17         return true;//不拦截表单提交动作
18     };
19 };
20 </script>
21 </head>
22  <body>
23 <h1>注册页面</h1>
24 <form action="" method="post" id="form1">
25 用户名:<input type="text" name="username"/>
26 <span id="usernameSpan"></span>
27 <br/>
28 密 码:<input type="password" name="password"/>
29 <span id="passwordSpan"></span>
30 <br/>
31 <input type="submit" value="注册"/>
32
33 </form>
34   </body>
35 </html>
36
37 js实现的局部刷新

jS实现局部刷新

三  AJAX常见应用场景

四  AJAX的优缺点

优点:

  • AJAX使用Javascript技术向服务器发送异步请求;
  • AJAX无须刷新整个页面;
  • 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高;

缺点:

  • AJAX并不适合所有场景,很多时候还是要使用同步交互;
  • AJAX虽然提高了用户体验,但无形中向服务器发送的请求次数增多了,导致服务器压力增大;
  • 因为AJAX是在浏览器中使用Javascript技术完成的,所以还需要处理浏览器兼容性问题;

五  AJAX技术

四步操作:

  • 创建核心对象;
  • 使用核心对象打开与服务器的连接;
  • 发送请求
  • 注册监听,监听服务器响应。

XMLHTTPRequest

  • open(请求方式, URL, 是否异步)
  • send(请求体)
  • onreadystatechange,指定监听函数,它会在xmlHttp对象的状态发生变化时被调用
  • readyState,当前xmlHttp对象的状态,其中4状态表示服务器响应结束
  • status:服务器响应的状态码,只有服务器响应结束时才有这个东东,200表示响应成功;
  • responseText:获取服务器的响应体

六  AJAX实现

七  AJAX实例

八  jQuery实现AJAX

$.ajax()是jQuery对AJAX的封装实现

$(function () {
        $("#login-button").click(function () {
            var username = $("#login-form #id_username").val();
            var password = $("#login-form #id_password").val();
            console.log(username);
            console.log(password);

            $.ajax({
                url:‘/host/login/‘,  // 发送数据目标url
                type:"POST",         // 发送数据方式
                data:{username:username,password:password},  // 发送数据
                success:function (data) {  // 成功响应的回调处理函数
                    var data_dict = JSON.parse(data);  //输入参数 data为JSON字符串
                    if(data_dict.status){
                        location.href = "/host/hosts/"
                    }else {
                        $("#login_msg").text(data_dict.error);
                    }
                }
            })
        })
    });

  

时间: 2024-11-05 07:32:23

Python自动化开发 - AJAX的相关文章

老男孩教育Python自动化开发精英班-开班典礼感想

2016年1月14日   老男孩教育Python自动化开发精英班-第一天 期待中的老男孩教育Python自动化开发精英班开办了. 我知道对于我这个年龄进入这个班意味着什么?首先,精力不如年轻人,其次,单位繁杂的事务性工作较多.所以,从现在起必须对工作处理更加效率,休息时间要进行压缩,否则就不能腾出更多的时间学习,压力还是很大的. 我知道,在这个班中都是些年轻人,大家都为了掌握一门具备前瞻性.实用性和就业面宽广的本事而来,以后可以在社会上有更多的.更好的和收入可观的发展机会.有人问了,你都快退休了

Python自动化开发,Day10 - 进程、线程、协程

本章内容 操作系统发展史介绍 进程与线程的区别 python GIL全局解释器锁 线程 语法 join 线程锁Lock\Rlock\信号量 将线程变为守护进程 Event时间 Queue队列 生产者消费者模型 进程 语法 进程间通讯 进程池 一.操作系统发展史介绍 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存

Python自动化开发-简介

一.简介 1.背景知识 Python是一门简明并强大的面向对象的编程语言. WEB开发.软件开发.科学运算.大数据分析.自动化运维等方面广泛使用 主流语言的区别和特点 C\C++:学习成本高,学习周期长,偏系统底层,在开发硬件驱动.嵌入式.游戏引擎开发等领域有广泛的应用 Java:目前使用最广泛的编程语言,第一个跨平台的语言,在大型ERP软件开发\安卓APP开发\网站开发领域使用广泛 Python:使用领域几乎和Java一样广泛,但开发效率要高于Java,且学习成本较低,在科学运算\数据分析\网

Python自动化开发学习12-MariaDB

关系型数据库 主流的关系型数据库大概有下面这些: Oracle : 甲骨文公司的企业级的数据库 SQL Server : 微软的 MySQL : 免费的数据库,现在也属于Oracle的旗下产品 MariaDB : 开源的数据库,MySQL的一个分支 PostgreSQL : 也是开源的 SQLite : 一款轻量级的数据库 DB2 : IBM的 RDBMS 术语 RDBMS(Relational Database Management System)即关系数据库管理系统,在开始之前,先了解下RD

Python自动化开发学习20-Django

ORM 一边写一个示例,一边回顾一下之前的内容,引出新的知识点展开讲解 回顾-创建项目 下面就从创建项目开始,一步一步先做一个页面出来.一.先创建一个新的Django项目项目名是:week20,App名是:app01因为是通过PyCharm创建的项目,创建的时候填上了 app name .所以PyCharm帮我么创建好了app同时也完成了注册.否则就去settings.py里面手动添加注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django

Python自动化开发学习22-Django上

session 上节已经讲了使用Cookie来做用户认证,但是Cookie的问题缺点:敏感信息不适合放在cookie里,敏感信息只能放在服务器端优势:把部分用户数据分散的存放在每个客户端,减轻服务端的压力Cookie是保存在用户浏览器端的键值对,Session是保存在服务器端的键值对.Session依赖Cookie,Cookie保存随机字符串,凭借这个随机字符串获取到服务器端Session里的内容.用Session来优化用户登录:用户登录后,生成一个随机字符串,通过Cookie发送给客户端保存.

Python自动化开发学习-Tornado

Tornado 基本操作 讲师的博客:白话tornado源码系列5篇,主要是源码剖析暂时不需要知道那么多.只要看下第一篇就好:https://www.cnblogs.com/wupeiqi/tag/Tornado/Web框架之Tornado:https://www.cnblogs.com/wupeiqi/p/5702910.html Hello World 经典的 hello world 示例: import tornado.web # 视图 class MainHandler(tornado.

python自动化开发-2

1.python的数据类型之列表 列表是Python开发语言中最常见的数据类型之一,通过列表可以实现对数据的增删改等常用操作. 列表的定义:例子 names = ["Lucy","Lily","jack"] 列表的常用功能 1)取出列表中的元素:例子 取出列表的第二个元素:通过下标的方式,下标从0开始计数. 取出列表的最后一个元素: 2)切片:例子

Python 自动化开发_简介

一.python  介绍 Python  简介[前世今生]: python的创始人是吉多·范罗苏姆(Guido van Rossum).于1989年的圣诞节期间开发的一个新脚本程序.作为ABC语言的一种继承. 为什么要学习python呢: 我的理解不是为什么要去学python.而是学习python能给你带来什么乐趣.每个人的求知欲不一样.所以看个人理解.简单点说对于运维的同学来说,学了python后不止自己的收入可以变得客观,也会使自己的工作变得很轻松.当然某些人可能会说我会shell编程就够了