From f93df73b74c42a4f990fc97716138a7f06c3111f Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sat, 9 May 2015 09:55:37 +0800 Subject: [PATCH 001/376] mysql2 --- 231.md | 334 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 1 + 2 files changed, 335 insertions(+) create mode 100644 231.md diff --git a/231.md b/231.md new file mode 100644 index 0000000..7cbc6ea --- /dev/null +++ b/231.md @@ -0,0 +1,334 @@ +>"So do not worry about tomorrow, for tomorrow will bring worries of its own. Today's trouble is enought for today." (MATTHEW 7:34) + +#MySQL数据库(2) + +就数据库而言,连接之后就要对其操作。但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维基百科对数据库表的简要解释,要想详细了解,需要看官在找一些有关数据库的教程和书籍来看看。 + +>在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系。它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个特定类型的信息,比如“姓氏”,而每行则包含了某个特定作者的所有信息:姓、名、住址等等。 + +>对于特定的数据库表,列的数目一般事先固定,各列之间可以由列名来识别。而行的数目可以随时、动态变化,每行通常都可以根据某个(或某几个)列中的数据来识别,称为候选键。 + +我打算在qiwsirtest中建立一个存储用户名、用户密码、用户邮箱的表,其结构用二维表格表现如下: + +|username|password|email| +|--------|--------|-----| +|qiwsir|123123|qiwsir@gmail.com| + +特别说明,这里为了简化细节,突出重点,对密码不加密,直接明文保存,虽然这种方式是很不安全的。但是,有不少网站还都这么做的,这么做的目的是比较可恶的。就让我在这里,仅仅在这里可恶一次。 + +##数据库表 + +因为直接操作数据部分,不是本教重点,但是关联到后面的操作,为了让读者在阅读上连贯,也快速地说明建立数据库表并输入内容。 + + mysql> use qiwsirtest; + Database changed + mysql> show tables; + Empty set (0.00 sec) + +用`show tables`命令显示这个数据库中是否有数据表了。查询结果显示为空。 + +下面就用如下命令建立一个数据表,这个数据表的内容就是上面所说明的。 + + mysql> create table users(id int(2) not null primary key auto_increment,username varchar(40),password text,email text)default charset=utf8; + Query OK, 0 rows affected (0.12 sec) + +建立的这个数据表名称是:users,其中包含上述字段,可以用下面的方式看一看这个数据表的结构。 + + mysql> show tables; + +----------------------+ + | Tables_in_qiwsirtest | + +----------------------+ + | users | + +----------------------+ + 1 row in set (0.00 sec) + +查询显示,在qiwsirtest这个数据库中,已经有一个表,它的名字是:users。 + + mysql> desc users; + +----------+-------------+------+-----+---------+----------------+ + | Field | Type | Null | Key | Default | Extra | + +----------+-------------+------+-----+---------+----------------+ + | id | int(2) | NO | PRI | NULL | auto_increment | + | username | varchar(40) | YES | | NULL | | + | password | text | YES | | NULL | | + | email | text | YES | | NULL | | + +----------+-------------+------+-----+---------+----------------+ + 4 rows in set (0.00 sec) + +显示表users的结构: + +特别提醒:上述所有字段设置仅为演示,在实际开发中,要根据具体情况来确定字段的属性。 + +如此就得到了一个空表。可以查询看看: + + mysql> select * from users; + Empty set (0.01 sec) + +向里面插入点信息,就只插入一条吧。 + + mysql> insert into users(username,password,email) values("qiwsir","123123","qiwsir@gmail.com"); + Query OK, 1 row affected (0.05 sec) + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + +----+----------+----------+------------------+ + 1 row in set (0.00 sec) + +这样就得到了一个有内容的数据库表。 + +##python操作数据库 + +连接数据库,必须的。 + + >>> import MySQLdb + >>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",charset="utf8") + +Python建立了与数据的连接,其实是建立了一个`MySQLdb.connect()`的实例对象,或者泛泛地称之为连接对象,python就是通过连接对象和数据库对话。这个对象常用的方法有: + +- commit():如果数据库表进行了修改,提交保存当前的数据。当然,如果此用户没有权限就作罢了,什么也不会发生。 +- rollback():如果有权限,就取消当前的操作,否则报错。 +- cursor([cursorclass]):返回连接的游标对象。通过游标执行SQL查询并检查结果。游标比连接支持更多的方法,而且可能在程序中更好用。 +- close():关闭连接。此后,连接对象和游标都不再可用了。 + +Python和数据之间的连接建立起来之后,要操作数据库,就需要让python对数据库执行SQL语句。Python是通过游标执行SQL语句的。所以,连接建立之后,就要利用连接对象得到游标对象,方法如下: + + >>> cur = conn.cursor() + +此后,就可以利用游标对象的方法对数据库进行操作。那么还得了解游标对象的常用方法: + +|名称|描述| +|----|----| +|close()|关闭游标。之后游标不可用| +|execute(query[,args])|执行一条SQL语句,可以带参数| +|executemany(query, pseq)|对序列pseq中的每个参数执行sql语句| +|fetchone()|返回一条查询结果| +|fetchall()|返回所有查询结果| +|fetchmany([size])|返回size条结果| +|nextset()|移动到下一个结果| +|scroll(value,mode='relative')|移动游标到指定行,如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.| + +###插入 + +例如,要在数据表users中插入一条记录,使得:username="python",password="123456",email="python@gmail.com",这样做: + + >>> cur.execute("insert into users (username,password,email) values (%s,%s,%s)",("python","123456","python@gmail.com")) + 1L + +没有报错,并且返回一个"1L"结果,说明有一行记录操作成功。不妨用"mysql>"交互方式查看一下: + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + +----+----------+----------+------------------+ + 1 row in set (0.00 sec) + +咦,奇怪呀。怎么没有看到增加的那一条呢?哪里错了?可是上面也没有报错呀。 + +特别注意,通过"cur.execute()"对数据库进行操作之后,没有报错,完全正确,但是不等于数据就已经提交到数据库中了,还必须要用到"MySQLdb.connect"的一个属性:commit(),将数据提交上去,也就是进行了"cur.execute()"操作,要将数据提交,必须执行: + + >>> conn.commit() + +再到"mysql>"中运行"select * from users"试一试: + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + | 2 | python | 123456 | python@gmail.com | + +----+----------+----------+------------------+ + 2 rows in set (0.00 sec) + +果然如此。这就如同编写一个文本一样,将文字写到文本上,并不等于文字已经保留在文本文件中了,必须执行"CTRL-S"才能保存。也就是在通过python操作数据库的时候,以"execute()"执行各种sql语句之后,要让已经执行的效果保存,必须运行连接对象的"commit()"方法。 + +再尝试一下插入多条的那个命令"executemany(query,args)". + + >>> cur.executemany("insert into users (username,password,email) values (%s,%s,%s)",(("google","111222","g@gmail.com"),("facebook","222333","f@face.book"),("github","333444","git@hub.com"),("docker","444555","doc@ker.com"))) + 4L + >>> conn.commit() + +到"mysql>"里面看结果: + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + | 2 | python | 123456 | python@gmail.com | + | 3 | google | 111222 | g@gmail.com | + | 4 | facebook | 222333 | f@face.book | + | 5 | github | 333444 | git@hub.com | + | 6 | docker | 444555 | doc@ker.com | + +----+----------+----------+------------------+ + 6 rows in set (0.00 sec) + +成功插入了多条记录。在"executemany(query, pseq)"中,query还是一条sql语句,但是pseq这时候是一个tuple,这个tuple里面的元素也是tuple,每个tuple分别对应sql语句中的字段列表。这句话其实被执行多次。只不过执行过程不显示给我们看罢了。 + +除了插入命令,其它对数据操作的命了都可用类似上面的方式,比如删除、修改等。 + +###查询 + +如果要从数据库中查询数据,也用游标方法来操作了。 + + >>> cur.execute("select * from users") + 7L + +这说明从users表汇总查询出来了7条记录。但是,这似乎有点不友好,告诉我7条记录查出来了,但是在哪里呢,如果在'mysql>'下操作查询命令,一下就把7条记录列出来了。怎么显示python在这里的查询结果呢? + +要用到游标对象的fetchall()、fetchmany(size=None)、fetchone()、scroll(value, mode='relative')等方法。 + + >>> cur.execute("select * from users") + 7L + >>> lines = cur.fetchall() + +到这里,已经将查询到的记录赋值给变量lines了。如果要把它们显示出来,就要用到曾经学习过的循环语句了。 + + >>> for line in lines: + ... print line + ... + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + (2L, u'python', u'123456', u'python@gmail.com') + (3L, u'google', u'111222', u'g@gmail.com') + (4L, u'facebook', u'222333', u'f@face.book') + (5L, u'github', u'333444', u'git@hub.com') + (6L, u'docker', u'444555', u'doc@ker.com') + (7L, u'\u8001\u9f50', u'9988', u'qiwsir@gmail.com') + +很好。果然是逐条显示出来了。列位注意,第七条中的u'\\u8001\\u95f5',这里是汉字,只不过由于我的shell不能显示罢了,不必惊慌,不必搭理它。 + +只想查出第一条,可以吗?当然可以!看下面的: + + >>> cur.execute("select * from users where id=1") + 1L + >>> line_first = cur.fetchone() #只返回一条 + >>> print line_first + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + +为了对上述过程了解深入,做下面实验: + + >>> cur.execute("select * from users") + 7L + >>> print cur.fetchall() + ((1L, u'qiwsir', u'123123', u'qiwsir@gmail.com'), (2L, u'python', u'123456', u'python@gmail.com'), (3L, u'google', u'111222', u'g@gmail.com'), (4L, u'facebook', u'222333', u'f@face.book'), (5L, u'github', u'333444', u'git@hub.com'), (6L, u'docker', u'444555', u'doc@ker.com'), (7L, u'\u8001\u9f50', u'9988', u'qiwsir@gmail.com')) + +原来,用cur.execute()从数据库查询出来的东西,被“保存在了cur所能找到的某个地方”,要找出这些被保存的东西,需要用cur.fetchall()(或者fechone等),并且找出来之后,做为对象存在。从上面的实验探讨发现,被保存的对象是一个tuple中,里面的每个元素,都是一个一个的tuple。因此,用for循环就可以一个一个拿出来了。 + +接着看,还有神奇的呢。 + +接着上面的操作,再打印一遍 + + >>> print cur.fetchall() + () + +晕了!怎么什么是空?不是说做为对象已经存在了内存中了吗?难道这个内存中的对象是一次有效吗? + +不要着急。 + +通过游标找出来的对象,在读取的时候有一个特点,就是那个游标会移动。在第一次操作了print cur.fetchall()后,因为是将所有的都打印出来,游标就从第一条移动到最后一条。当print结束之后,游标已经在最后一条的后面了。接下来如果再次打印,就空了,最后一条后面没有东西了。 + +下面还要实验,检验上面所说: + + >>> cur.execute('select * from users') + 7L + >>> print cur.fetchone() + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + >>> print cur.fetchone() + (2L, u'python', u'123456', u'python@gmail.com') + >>> print cur.fetchone() + (3L, u'google', u'111222', u'g@gmail.com') + +这次我不一次全部打印出来了,而是一次打印一条,看官可以从结果中看出来,果然那个游标在一条一条向下移动呢。注意,我在这次实验中,是重新运行了查询语句。 + +那么,既然在操作存储在内存中的对象时候,游标会移动,能不能让游标向上移动,或者移动到指定位置呢?这就是那个scroll() + + >>> cur.scroll(1) + >>> print cur.fetchone() + (5L, u'github', u'333444', u'git@hub.com') + >>> cur.scroll(-2) + >>> print cur.fetchone() + (4L, u'facebook', u'222333', u'f@face.book') + +果然,这个函数能够移动游标,不过请仔细观察,上面的方式是让游标相对与当前位置向上或者向下移动。即: + +cur.scroll(n),或者,cur.scroll(n,"relative"):意思是相对当前位置向上或者向下移动,n为正数,表示向下(向前),n为负数,表示向上(向后) + +还有一种方式,可以实现“绝对”移动,不是“相对”移动:增加一个参数"absolute" + +特别提醒看官注意的是,在python中,序列对象是的顺序是从0开始的。 + + >>> cur.scroll(2,"absolute") #回到序号是2,但指向第三条 + >>> print cur.fetchone() #打印,果然是 + (3L, u'google', u'111222', u'g@gmail.com') + + >>> cur.scroll(1,"absolute") + >>> print cur.fetchone() + (2L, u'python', u'123456', u'python@gmail.com') + + >>> cur.scroll(0,"absolute") #回到序号是0,即指向tuple的第一条 + >>> print cur.fetchone() + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + +至此,已经熟悉了cur.fetchall()和cur.fetchone()以及cur.scroll()几个方法,还有另外一个,接这上边的操作,也就是游标在序号是1的位置,指向了tuple的第二条 + + >>> cur.fetchmany(3) + ((2L, u'python', u'123456', u'python@gmail.com'), (3L, u'google', u'111222', u'g@gmail.com'), (4L, u'facebook', u'222333', u'f@face.book')) + +上面这个操作,就是实现了从当前位置(游标指向tuple的序号为1的位置,即第二条记录)开始,含当前位置,向下列出3条记录。 + +读取数据,好像有点啰嗦呀。细细琢磨,还是有道理的。你觉得呢? + +不过,python总是能够为我们着想的,在连接对象的游标方法中提供了一个参数,可以实现将读取到的数据变成字典形式,这样就提供了另外一种读取方式了。 + + >>> cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) + >>> cur.execute("select * from users") + 7L + >>> cur.fetchall() + ({'username': u'qiwsir', 'password': u'123123', 'id': 1L, 'email': u'qiwsir@gmail.com'}, {'username': u'mypython', 'password': u'123456', 'id': 2L, 'email': u'python@gmail.com'}, {'username': u'google', 'password': u'111222', 'id': 3L, 'email': u'g@gmail.com'}, {'username': u'facebook', 'password': u'222333', 'id': 4L, 'email': u'f@face.book'}, {'username': u'github', 'password': u'333444', 'id': 5L, 'email': u'git@hub.com'}, {'username': u'docker', 'password': u'444555', 'id': 6L, 'email': u'doc@ker.com'}, {'username': u'\u8001\u9f50', 'password': u'9988', 'id': 7L, 'email': u'qiwsir@gmail.com'}) + +这样,在元组里面的元素就是一个一个字典: + + >>> cur.scroll(0,"absolute") + >>> for line in cur.fetchall(): + ... print line["username"] + ... + qiwsir + mypython + google + facebook + github + docker + 老齐 + +根据字典对象的特点来读取了“键-值”。 + +###更新数据 + +经过前面的操作,这个就比较简单了,不过需要提醒的是,如果更新完毕,和插入数据一样,都需要commit()来提交保存。 + + >>> cur.execute("update users set username=%s where id=2",("mypython")) + 1L + >>> cur.execute("select * from users where id=2") + 1L + >>> cur.fetchone() + (2L, u'mypython', u'123456', u'python@gmail.com') + +从操作中看出来了,已经将数据库中第二条的用户名修改为mypython了,用的就是update语句。 + +不过,要真的实现在数据库中更新,还要运行: + + >>> conn.commit() + +这就大事完吉了。 + +python来操作mysql数据,基本方法介绍完毕。 + +------ + +[总目录](./index.md)   |   [上节:mysql数据库(1)](./230.md)   |   [下节:mongodb数据库](./232.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index 0e0aade..750c7bd 100644 --- a/index.md +++ b/index.md @@ -94,6 +94,7 @@ 1. [将数据存入文件](./229.md)==>pickle模块,shelve模块 2. [MySQL数据库(1)](./230.md)==>MySQL概况,安装,python连接MySQL模块和方法 +3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 #第叁季 实战 From 5d6e2e69b406ae03d0654b2ffc17dec5ae32f665 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sat, 9 May 2015 10:58:42 +0800 Subject: [PATCH 002/376] utf-8 --- 1code/chartoint.py | 16 +++++++ index.md | 1 + n002.md | 111 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 1code/chartoint.py create mode 100644 n002.md diff --git a/1code/chartoint.py b/1code/chartoint.py new file mode 100644 index 0000000..9cd54c5 --- /dev/null +++ b/1code/chartoint.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# coding=utf-8 + +def change_char(character, n): + new = [] + for c in character: + i = ord(c) + n + new.append(chr(i)) + return "".join(new) + +if __name__ == "__main__": + one = "abc" + new = change_char(one, 2) + print one + print new + diff --git a/index.md b/index.md index 750c7bd..cdb4bdf 100644 --- a/index.md +++ b/index.md @@ -106,3 +106,4 @@ ##附:网络文摘 1. [如何成为python高手](./n001.md) +2. [ASCII、Unicode、GBK和UTF-8字符编码的区别联系](./n002.md) diff --git a/n002.md b/n002.md new file mode 100644 index 0000000..b2ab84d --- /dev/null +++ b/n002.md @@ -0,0 +1,111 @@ +#ASCII、Unicode、GBK和UTF-8字符编码的区别联系 + +2015-05-08 实验楼 + +很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为“字节”。 + +再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为“计算机”。 + +开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作,如: + + 遇上0×10, 终端就换行; + + 遇上0×07, 终端就向人们嘟嘟叫; + + 遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。 + +他们看到这样很好,于是就把这些0×20以下的字节状态称为“控制码”。他们又把所有的空 格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。 + +大家看到这样,都感觉很好,于是大家都把这个方案叫做 ANSI的“Ascii”编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。 + +后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用 127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。 + +从128 到255这一页的字符集被称“扩展字符集”。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧! + +等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。 + +但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定: + + 一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字; + + 前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE; + + +这样我们就可以组合出大约7000多个简体汉字了。 + +在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的“全角”字符。 + +而原来在127号以下的那些就叫“半角”字符了。 + +中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312”。GB2312 是对 ASCII 的中文扩展。 + +但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。 + +于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。 + +后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 + +后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了 GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。 + +中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)。 + +在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。 + +那时候凡是受过加持,会编程的计算机僧侣们都要每天念下面这个咒语数百遍: “一个汉字算两个英文字符!一个汉字算两个英文字符……” + +因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码。 + +连大陆和台湾这样只相隔了150海里,使用着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字,就必须装上一个“汉字系统”,专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5 编码的什么“倚天汉字系统”才可以用,装错了字符系统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电脑的穷苦人民,他们的文字又怎么办? 真是计算机的巴比伦塔命题啊! + +正在这时,大天使加百列及时出现了——一个叫 ISO (国际标谁化组织)的国际组织决定着手解决这个问题。 + +他们采用的方法很简单: + + 废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号 的编码! + +他们打算叫它”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “unicode”。 + +unicode开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些“半角”字符,unicode包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于“半角”英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。 + +这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的strlen函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,从unicode开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的“一个字符”!同时,也都是统一的“两个字节”,请注意“字符”和“字节”两个术语的不同: + + “字节”是一个8位的物理存贮单元, + + 而“字符”则是一个文化相关的符号。 + +在unicode中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。 + +unicode同样也不完美,这里就有两个的问题, + + 一个是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢? + + 第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费,文本文件的大小会因此大出二三倍,这是难以接受的。 + +unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义: + + UTF-8就是每次8个位传输数据, + + 而UTF-16就是每次16个位。 + +UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。 + +UTF-8最大的一个特点,就是它是一种变长的编码方式。 + +它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,(注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节)。 + +从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。 + +Unicode符号范围 | UTF-8编码方式 + +(十六进制) | (二进制) +—————————————————————– +0000 0000-0000 007F | 0xxxxxxx +0000 0080-0000 07FF | 110xxxxx 10xxxxxx +0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx +0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + +之前一直对字符编码很模糊,网查资料被忽悠地晕头转向,看完这篇风趣的文章,把之前模糊的知识点串联起来,并稍加总结,我和我的小伙伴们都明白了! + +via:http://toutiao.io/ + +原文链接:http://dengo.org/archives/901 \ No newline at end of file From 8dc34e37c18f15657a127f2f05ba0e360debfb97 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 19:50:57 +0800 Subject: [PATCH 003/376] pymongo --- 232.md | 318 ++++++++++++++++++++++++++++++++++++++++++++++ 2images/23201.jpg | Bin 0 -> 132931 bytes index.md | 1 + 3 files changed, 319 insertions(+) create mode 100644 232.md create mode 100644 2images/23201.jpg diff --git a/232.md b/232.md new file mode 100644 index 0000000..fa2247b --- /dev/null +++ b/232.md @@ -0,0 +1,318 @@ +>大哉!敬虔的奥秘,无人不以为然,就是:神在肉身显现,被圣灵称义,被天使看见,被传于外邦,被世人信服,被接在荣耀里。(1 TIMOTHY 3:16) + +#mongodb数据库(1) + +MongoDB开始火了,这是时代发展的需要。为此,本教程也要涉及到如何用python来操作mongodb。考虑到读者对这种数据库可能比mysql之类的更陌生,所以,要用多一点的篇幅稍作介绍,当然,更完备的内容还是要去阅读专业的mongodb书籍。 + +mongodb是属于NoSql的。 + +NoSql,全称是 Not Only Sql,指的是非关系型的数据库。它是为了大规模web应用而生的,其特征诸如模式自由、支持简易复制、简单的API、大容量数据等等。 + +MongoDB是其一,选择它,主要是因为我喜欢,否则我不会列入我的教程。数说它的特点,可能是: + +- 面向文档存储 +- 对任何属性可索引 +- 复制和高可用性 +- 自动分片 +- 丰富的查询 +- 快速就地更新 + +也许还能列出更多,基于它的特点,擅长领域就在于: + +- 大数据(太时髦了!以下可以都不看,就要用它了。) +- 内容管理和交付 +- 移动和社交基础设施 +- 用户数据管理 +- 数据平台 + +##安装mongodb + +先演示在ubuntu系统中的安装过程: + + sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 + echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list + sudo apt-get update + sudo apt-get install mongodb-10gen + +如此就安装完毕。上述安装流程来自:[Install MongoDB](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/) + +如果你用的是其它操作系统,可以到官方网站下载安装程序:[http://www.mongodb.org/downloads](http://www.mongodb.org/downloads),能满足各种操作系统。 + +![](./2images/23201.jpg) + +>难免在安装过程中遇到问题,推荐几个资料,供参考: + +>[window平台安装 MongoDB](http://www.w3cschool.cc/mongodb/mongodb-window-install.html) + +>[NoSQL之【MongoDB】学习(一):安装说明](http://www.cnblogs.com/zhoujinyi/archive/2013/06/02/3113868.html) + +>[MongoDB 生产环境的安装与配置(Ubuntu)](https://ruby-china.org/topics/454) + +>[在Ubuntu中安装MongoDB](http://blog.fens.me/linux-mongodb-install/) + +>[在Ubuntu下进行MongoDB安装步骤](www.cnblogs.com/alexqdh/archive/2011/11/25/2263626.html) + +##启动mongodb + +安装完毕,就可以启动数据库。因为本教程不是专门讲数据库,所以,这里不设计数据库的详细讲解,请读者参考有关资料。下面只是建立一个简单的库,并且说明mongodb的基本要点,目的在于为后面用python来操作它做个铺垫。 + +执行`mongo`启动shell,显示的也是`>`,有点类似mysql的状态。在shell中,可以实现与数据库的交互操作。 + +在shell中,有一个全局变量db,使用哪个数据库,那个数据库就会被复制给这个全局变量db,如果那个数据库不存在,就会新建。 + + > use mydb + switched to db mydb + > db + mydb + +除非向这个数据库中增加实质性的内容,否则它是看不到的。 + + > show dbs; + local 0.03125GB + +向这个数据库增加点东西。mongodb的基本单元是文档,所谓文档,就类似与python中的字典,以键值对的方式保存数据。 + + > book = {"title":"from beginner to master", "author":"qiwsir", "lang":"python"} + { + "title" : "from beginner to master", + "author" : "qiwsir", + "lang" : "python" + } + > db.books.insert(book) + > db.books.find() + { "_id" : ObjectId("554f0e3cf579bc0767db9edf"), "title" : "from beginner to master", "author" : "qiwsir", "lang" : "python" } + +db指向了数据库mydb,books是这个数据库里面的一个集合(类似mysql里面的表),向集合books里面插入了一个文档(文档对应mysql里面的记录)。“数据库、集合、文档”构成了mongodb数据库。 + +从上面操作,还发现一个有意思的地方,并没有类似create之类的命令,用到数据库,就通过`use xxx`,如果不存在就建立;用到集合,就通过`db.xxx`来使用,如果没有就建立。可以总结为“随用随取随建立”。是不是简单的有点出人意料。 + + > show dbs + local 0.03125GB + mydb 0.0625GB + +当有了充实内容之后,也看到刚才用到的数据库mydb了。 + +在mongodb的shell中,可以对数据进行“增删改查”等操作。但是,我们的目的是用python来操作,所以,还是把力气放在后面用。 + +##安装pymongo + +要用python来驱动mongodb,必须要安装驱动模块,即pymongo,这跟操作mysql类似。安装方法,我最推荐如下: + + $ sudo pip install pymongo + +如果顺利,就会看到最后的提示: + + Successfully installed pymongo + Cleaning up... + +安装好之后,进入到python的交互模式里面: + + >>> import pymongo + +说明模块没有问题。 + +##连接mongodb + +既然python驱动mongdb的模块pymongo业已安装完毕,接下来就是连接,也就是建立连接对象。 + + >>> pymongo.Connection("localhost",27017) + Traceback (most recent call last): + File "", line 1, in + AttributeError: 'module' object has no attribute 'Connection' + +报错!我在去年做的项目中,就是这样做的,并且网上查看很多教程都是这么连接。 + +但是,经验主义害死人,如果: + + >>> dir(pymongo) + ['ALL', 'ASCENDING', 'CursorType', 'DESCENDING', 'DeleteMany', 'DeleteOne', 'GEO2D', 'GEOHAYSTACK', 'GEOSPHERE', 'HASHED', 'IndexModel', 'InsertOne', 'MAX_SUPPORTED_WIRE_VERSION', 'MIN_SUPPORTED_WIRE_VERSION', 'MongoClient', 'MongoReplicaSetClient', 'OFF', 'ReadPreference', 'ReplaceOne', 'ReturnDocument', 'SLOW_ONLY', 'TEXT', 'UpdateMany', 'UpdateOne', 'WriteConcern', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_cmessage', 'auth', 'bulk', 'client_options', 'collection', 'command_cursor', 'common', 'cursor', 'cursor_manager', 'database', 'errors', 'get_version_string', 'has_c', 'helpers', 'ismaster', 'message', 'mongo_client', 'mongo_replica_set_client', 'monitor', 'monotonic', 'network', 'operations', 'periodic_executor', 'pool', 'read_preferences', 'response', 'results', 'server', 'server_description', 'server_selectors', 'server_type', 'settings', 'son_manipulator', 'ssl_context', 'ssl_support', 'thread_util', 'topology', 'topology_description', 'uri_parser', 'version', 'version_tuple', 'write_concern'] + +瞪大我的那双浑浊迷茫布满血丝渴望惊喜的眼睛,透过近视镜的玻璃片,怎么也找不到Connection()这个方法。原来,刚刚安装的pymongo变了,“他变了”。 + +不过,我发现了它:MongoClient() + + >>> client = pymongo.MongoClient("localhost", 27017) + +很好。python已经和mongodb建立了连接。 + +刚才已经建立了一个数据库mydb,并且在这个库里面有一个集合books,于是: + + >>> db = client.mydb + +或者 + + >>> db = client['mydb'] + +获得数据库mydb,并赋值给变量db(这个变量不是mongodb的shell中的那个db,此处的db就是python中一个寻常的变量)。 + + >>> db.collection_names() + [u'system.indexes', u'books'] + +查看集合,发现了我们已经建立好的那个books,于是在获取这个集合,并赋值给一个变量books: + + >>> books = db["books"] + +或者 + + >>> books = db.books + +接下来,就可以操作这个集合中的具体内容了。 + +###编辑 + +刚刚的books所引用的是一个mongodb的集合对象,它就跟前面学习过的其它对象一样,有一些方法供我们来驱使。 + + >>> type(books) + + + >>> dir(books) + ['_BaseObject__codec_options', '_BaseObject__read_preference', '_BaseObject__write_concern', '_Collection__create', '_Collection__create_index', '_Collection__database', '_Collection__find_and_modify', '_Collection__full_name', '_Collection__name', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattr__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_command', '_count', '_delete', '_insert', '_socket_for_primary_reads', '_socket_for_reads', '_socket_for_writes', '_update', 'aggregate', 'bulk_write', 'codec_options', 'count', 'create_index', 'create_indexes', 'database', 'delete_many', 'delete_one', 'distinct', 'drop', 'drop_index', 'drop_indexes', 'ensure_index', 'find', 'find_and_modify', 'find_one', 'find_one_and_delete', 'find_one_and_replace', 'find_one_and_update', 'full_name', 'group', 'index_information', 'initialize_ordered_bulk_op', 'initialize_unordered_bulk_op', 'inline_map_reduce', 'insert', 'insert_many', 'insert_one', 'list_indexes', 'map_reduce', 'name', 'next', 'options', 'parallel_scan', 'read_preference', 'reindex', 'remove', 'rename', 'replace_one', 'save', 'update', 'update_many', 'update_one', 'with_options', 'write_concern'] + +这么多方法不会一一介绍,只是按照“增删改查”的常用功能,介绍几种。读者可以使用help()去查看每一种方法的使用说明。 + + >>> books.find_one() + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + +提醒读者注意的是,如果你熟悉了mongodb的shell中的命令,跟pymongo中的方法稍有差别,比如刚才这个,在mongodb的shell中是这样子的: + + > db.books.findOne() + { + "_id" : ObjectId("554f0e3cf579bc0767db9edf"), + "title" : "from beginner to master", + "author" : "qiwsir", + "lang" : "python" + } + +请注意区分。 + +目前在集合books中,有一个文档,还想再增加,于是插入一条: + +**新增和查询** + + >>> b2 = {"title":"physics", "author":"Newton", "lang":"english"} + >>> books.insert(b2) + ObjectId('554f28f465db941152e6df8b') + +成功地向集合中增加了一个文档。得看看结果(我们就是充满好奇心的小孩子,我记得女儿小时候,每个给她照相,拍了一张,她总要看一看。现在我们似乎也是这样,如果不看看,总觉得不放心),看看就是一种查询。 + + >>> books.find().count() + 2 + +这是查看当前集合有多少个文档的方式,返回值为2,则说明有两条文档了。还是要看看内容。 + + >>> books.find_one() + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + +这个命令就不行了,因为它只返回第一条。必须要: + + >>> for i in books.find(): + ... print i + ... + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + +在books引用的对象中有find()方法,它返回的是一个可迭代对象,包含着集合中所有的文档。 + +由于文档是键值对,也不一定每条文档都要结构一样,比如,也可以插入这样的文档进入集合。 + + >>> books.insert({"name":"Hertz"}) + ObjectId('554f2b4565db941152e6df8c') + >>> for i in books.find(): + ... print i + ... + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + {u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'} + +如果有多个文档,想一下子插入到集合中(在mysql中,可以实现多条数据用一条命令插入到表里面,还记得吗?忘了看[上一节](./231.md)),可以这么做: + + >>> n1 = {"title":"java", "name":"Bush"} + >>> n2 = {"title":"fortran", "name":"John Warner Backus"} + >>> n3 = {"title":"lisp", "name":"John McCarthy"} + >>> n = [n1, n2, n3] + >>> n + [{'name': 'Bush', 'title': 'java'}, {'name': 'John Warner Backus', 'title': 'fortran'}, {'name': 'John McCarthy', 'title': 'lisp'}] + >>> books.insert(n) + [ObjectId('554f30be65db941152e6df8d'), ObjectId('554f30be65db941152e6df8e'), ObjectId('554f30be65db941152e6df8f')] + +这样就完成了所谓的批量插入,查看一下文档条数: + + >>> books.find().count() + 6 + +但是,要提醒读者,批量插入的文档大小是有限制的,网上有人说不要超过20万条,有人说不要超过16MB,我没有测试过。在一般情况下,或许达不到上线,如果遇到极端情况,就请读者在使用时多注意了。 + +如果要查询,除了通过循环之外,能不能按照某个条件查呢?比如查找`'name'='Bush'`的文档: + + >>> books.find_one({"name":"Bush"}) + {u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'} + +对于查询结果,还可以进行排序: + + >>> for i in books.find().sort("title", pymongo.ASCENDING): + ... print i + ... + {u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'} + {u'_id': ObjectId('554f30be65db941152e6df8e'), u'name': u'John Warner Backus', u'title': u'fortran'} + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'} + {u'_id': ObjectId('554f30be65db941152e6df8f'), u'name': u'John McCarthy', u'title': u'lisp'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + +这是按照"title"的值的升序排列的,注意sort()中的第二个参数,意思是升序排列。如果按照降序,就需要将参数修改为`pymongo.DESCEDING`,也可以指定多个排序键。 + + >>> for i in books.find().sort([("name",pymongo.ASCENDING),("name",pymongo.DESCENDING)]): + ... print i + ... + {u'_id': ObjectId('554f30be65db941152e6df8e'), u'name': u'John Warner Backus', u'title': u'fortran'} + {u'_id': ObjectId('554f30be65db941152e6df8f'), u'name': u'John McCarthy', u'title': u'lisp'} + {u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'} + {u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'} + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + +**更新** + +对于已有数据,进行更新,是数据库中常用的操作。比如,要更新name为Hertz那个文档: + + >>> books.update({"name":"Hertz"}, {"$set": {"title":"new physics", "author":"Hertz"}}) + {u'updatedExisting': True, u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1} + >>> books.find_one({"author":"Hertz"}) + {u'title': u'new physics', u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz', u'author': u'Hertz'} + +在更新的时候,用了一个`$set`修改器,它可以用来指定键值,如果键不存在,就会创建。 + +关于修改器,不仅仅是这一个,还有别的呢。 + +|修改器|描述| +|----|----| +|$set|用来指定一个键的值。如果不存在则创建它| +|$unset|完全删除某个键| +|$inc|增加已有键的值,不存在则创建(只能用于增加整数、长整数、双精度浮点数) +|$push|数组修改器只能操作值为数组,存在key在值末尾增加一个元素,不存在则创建一个数组| + +**删除** + +删除可以用remove()方法: + + >>> books.remove({"name":"Bush"}) + {u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1} + >>> books.find_one({"name":"Bush"}) + >>> + +这是将那个文档全部删除。当然,也可以根据mongodb的语法规则,写个条件,按照条件删除。 + +**索引** + +索引的目的是为了让查询速度更快,当然,在具体的项目开发中,要视情况而定是否建立索引。因为建立索引也是有代价的。 + + >>> books.create_index([("title", pymongo.DESCENDING),]) + u'title_-1' + +我这里仅仅是对pymongo模块做了一个非常简单的介绍,在实际使用过程中,上面知识是很有限的,所以需要读者根据具体应用场景再结合mongodb的有关知识去尝试新的语句。 + +------ + +[总目录](./index.md)   |   [上节:mysql数据库(2)](./231.md)   |   [下节:sqlite数据库](./233.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2images/23201.jpg b/2images/23201.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea6db163faa88beea430fd3a9de394c180f7b16d GIT binary patch literal 132931 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模块,shelve模块 2. [MySQL数据库(1)](./230.md)==>MySQL概况,安装,python连接MySQL模块和方法 3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 +4. [MongoDB数据库](./232.md)==>mongodb的安装启动,pymongo模块:连接客户端,数据库的增删改查操作 #第叁季 实战 From f9c47a04560dfeef6873ffe8e9415f3d0e37cdb9 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 20:11:17 +0800 Subject: [PATCH 004/376] modify --- 204.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/204.md b/204.md index b76878f..ad66871 100644 --- a/204.md +++ b/204.md @@ -227,7 +227,7 @@ func是一个函数,seq是一个序列对象。在执行的时候,序列对 - 对iterable中的每个元素,依次应用function的方法(函数)(这本质上就是一个for循环)。 - 将所有结果返回一个list。 -- 如果参数很多,则对么个参数并行执行function。 +- 如果参数很多,则对那些参数并行执行function。 例如: From a60d9fb28fd89e88cefd76a5086d9220cc0f1392 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 20:11:39 +0800 Subject: [PATCH 005/376] pymongo --- 232.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/232.md b/232.md index fa2247b..46dc87a 100644 --- a/232.md +++ b/232.md @@ -122,7 +122,9 @@ db指向了数据库mydb,books是这个数据库里面的一个集合(类似 报错!我在去年做的项目中,就是这样做的,并且网上查看很多教程都是这么连接。 -但是,经验主义害死人,如果: +所以,读者如果用的是旧版本的pymongo,比如2.8,仍然可以使用上面的连接方法,如果是像我一样,是用的新的(我安装时没有选版本),就得注意这个问题了。 + +经验主义害死人。必须看看下面有哪些方法可以用: >>> dir(pymongo) ['ALL', 'ASCENDING', 'CursorType', 'DESCENDING', 'DeleteMany', 'DeleteOne', 'GEO2D', 'GEOHAYSTACK', 'GEOSPHERE', 'HASHED', 'IndexModel', 'InsertOne', 'MAX_SUPPORTED_WIRE_VERSION', 'MIN_SUPPORTED_WIRE_VERSION', 'MongoClient', 'MongoReplicaSetClient', 'OFF', 'ReadPreference', 'ReplaceOne', 'ReturnDocument', 'SLOW_ONLY', 'TEXT', 'UpdateMany', 'UpdateOne', 'WriteConcern', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_cmessage', 'auth', 'bulk', 'client_options', 'collection', 'command_cursor', 'common', 'cursor', 'cursor_manager', 'database', 'errors', 'get_version_string', 'has_c', 'helpers', 'ismaster', 'message', 'mongo_client', 'mongo_replica_set_client', 'monitor', 'monotonic', 'network', 'operations', 'periodic_executor', 'pool', 'read_preferences', 'response', 'results', 'server', 'server_description', 'server_selectors', 'server_type', 'settings', 'son_manipulator', 'ssl_context', 'ssl_support', 'thread_util', 'topology', 'topology_description', 'uri_parser', 'version', 'version_tuple', 'write_concern'] From a5e276c7d581395555d42309c464d03f57c0aba2 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 20:19:07 +0800 Subject: [PATCH 006/376] pymongo --- 232.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/232.md b/232.md index 46dc87a..9458b42 100644 --- a/232.md +++ b/232.md @@ -105,6 +105,18 @@ db指向了数据库mydb,books是这个数据库里面的一个集合(类似 Successfully installed pymongo Cleaning up... +如果不选择版本,安装的应该是最新版本的,我在本教程测试的时候,安装的是: + + >>> import pymongo + >>> pymongo.version + '3.0.1' + +这个版本在后面给我挖了一个坑。如果读者要指定版本,比如安装2.8版本的,可以: + + $ sudo pip install pymongo==2.8 + +如果用这个版本,我后面遇到的坑能够避免。 + 安装好之后,进入到python的交互模式里面: >>> import pymongo From 449c3c75c2e4423f4d23a1676306a3a28cc3ed52 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 21:14:04 +0800 Subject: [PATCH 007/376] modify --- 209.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2code/20902_1.py | 29 +++++++++++++++++++++++++++++ 2code/20904.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 2code/20902_1.py create mode 100644 2code/20904.py diff --git a/209.md b/209.md index 9592f7a..8c21fb6 100644 --- a/209.md +++ b/209.md @@ -127,6 +127,54 @@ 由上述两个实例,已经清楚看到了继承的特点,即将父类的方法和属性全部承接到子类中;如果子类重写了父类的方法,就使用子类的该方法,父类的被遮盖。 +##多重继承的顺序 + +多重继承的顺序很必要了解。比如,如果一个子类继承了两个父类,并且两个父类有同样的方法或者属性,那么在实例化子类后,调用那个方法或属性,是属于哪个父类的呢?造一个没有实际意义,纯粹为了解决这个问题的程序: + + #!/usr/bin/env python + # coding=utf-8 + + class K1(object): + def foo(self): + print "K1-foo" + + class K2(object): + def foo(self): + print "K2-foo" + def bar(self): + print "K2-bar" + + class J1(K1, K2): + pass + + class J2(K1, K2): + def bar(self): + print "J2-bar" + + class C(J1, J2): + pass + + if __name__ == "__main__": + print C.__mro__ + m = C() + m.foo() + m.bar() + +这段代码,保存后运行: + + $ python 20904.py + (, , , , , ) + K1-foo + J2-bar + +代码中的`print C.__mro__`是要打印出类的继承顺序。从上面清晰看出来了。如果要执行foo()方法,首先看J1,没有,看J2,还没有,看J1里面的K1,有了,即C==>J1==>J2==>K1;bar()也是按照这个顺序,在J2中就找到了一个。 + +这种对继承属性和方法搜索的顺序称之为“广度优先”。 + +新式类用以及python3.x中都是按照此顺序原则搜寻属性和方法的。 + +但是,在旧式类中,是按照“深度优先”的顺序的。因为后面读者也基本不用旧式类,所以不举例。如果读者愿意,可以自己模仿上面代码,探索旧式类的“深度优先”含义。 + ##super函数 对于初始化函数的继承,跟一般方法的继承,还有点不同。可以看下面的例子: diff --git a/2code/20902_1.py b/2code/20902_1.py new file mode 100644 index 0000000..088a73a --- /dev/null +++ b/2code/20902_1.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# coding=utf-8 + +__metaclass__ = type + +class Person: + + def eye(self): + print "two eyes" + + def breast(self, n): + print "The breast is: ",n + +class Girl: + age = 28 + def color(self): + print "The girl is white" + def eye(self): + print "girl's eyes are big." + +class HotGirl(Person, Girl): + pass + +if __name__ == "__main__": + kong = HotGirl() + kong.eye() + kong.breast(90) + kong.color() + print kong.age diff --git a/2code/20904.py b/2code/20904.py new file mode 100644 index 0000000..4f132a1 --- /dev/null +++ b/2code/20904.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# coding=utf-8 + +class K1(object): + def foo(self): + print "K1-foo" + +class K2(object): + def foo(self): + print "K2-foo" + def bar(self): + print "K2-bar" + +class J1(K1, K2): + pass + +class J2(K1, K2): + def bar(self): + print "J2-bar" + +class C(J1, J2): + pass + +if __name__ == "__main__": + print C.__mro__ + m = C() + m.foo() + m.bar() + From a51275b281e59d0a822ee16c120dd2d6a57df5ac Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 11 May 2015 10:47:50 +0800 Subject: [PATCH 008/376] modify --- 231.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/231.md b/231.md index 7cbc6ea..4ed0e48 100644 --- a/231.md +++ b/231.md @@ -325,7 +325,12 @@ cur.scroll(n),或者,cur.scroll(n,"relative"):意思是相对当前位置 这就大事完吉了。 -python来操作mysql数据,基本方法介绍完毕。 +应该还有个小尾巴,那就是当你操作数据完毕,不要忘记关门: + + >>> cur.close() + >>> conn.close() + +门锁好了,放心离开。 ------ From abb62081ebd7300f1b04381e644274f44633a549 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 11 May 2015 10:48:27 +0800 Subject: [PATCH 009/376] sqlite --- 233.md | 145 +++++++++++++++++++++++++++++++++++++++++++++ 2code/23301.db | Bin 0 -> 2048 bytes 2code/23301.sqlite | Bin 0 -> 2048 bytes index.md | 1 + 4 files changed, 146 insertions(+) create mode 100644 233.md create mode 100644 2code/23301.db create mode 100644 2code/23301.sqlite diff --git a/233.md b/233.md new file mode 100644 index 0000000..fa2529a --- /dev/null +++ b/233.md @@ -0,0 +1,145 @@ +>然而,敬虔加上知足的心便是大利了,因为我们没有带什么到世上来,也不能带什么去,只要有衣有食,就当知足。但那些想要发财的人,就陷在迷惑、落在网罗和许多无知有害的私欲里,叫人沉在败坏和灭亡中。贪财是万恶之根。有人贪恋钱财,就被引诱离了真道,用许多愁苦把自己刺透了。(1 TIMOTHY 6:6-10) + +#SQLite数据库 + +SQLite是一个小型的关系型数据库,它最大的特点在于不需要服务器、零配置。在前面的两个服务器,不管是MySQL还是MongoDB,都需要“安装”,安装之后,它运行起来,其实是已经有一个相应的服务器在跑着呢。而SQLite不需要这样,首先python已经将相应的驱动模块作为标准库一部分了,只要安装了python,就可以使用;另外,它也不需要服务器,可以类似操作文件那样来操作SQLite数据库文件。还有一点也不错,SQLite源代码不受版权限制。 + +SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使用。 + +跟操作mysql数据库类似,对于SQLite数据库,也要通过以下几步: + +- 建立连接对象 +- 连接对象方法:建立游标对象 +- 游标对象方法:执行sql语句 + +##建立连接对象 + +由于SQLite数据库的驱动已经在python里面了,所以,只要引用就可以直接使用 + + >>> import sqlite3 + >>> conn = sqlite3.connect("23301.db") + +这样就得到了连接对象,是不是比mysql连接要简化了很多呢。在`sqlite3.connect("23301.db")`语句中,如果已经有了那个数据库,就连接上它;如果没有,就新建一个。注意,这里的路径可以随意指定的。 + +不妨到目录中看一看,是否存在了刚才建立的数据库文件。 + + /2code$ ls 23301.db + 23301.db + +果然有了一个文件。 + +连接对象建立起来之后,就要使用连接对象的方法继续工作了。 + + >>> dir(conn) + ['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__call__', '__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'commit', 'create_aggregate', 'create_collation', 'create_function', 'cursor', 'enable_load_extension', 'execute', 'executemany', 'executescript', 'interrupt', 'isolation_level', 'iterdump', 'load_extension', 'rollback', 'row_factory', 'set_authorizer', 'set_progress_handler', 'text_factory', 'total_changes'] + +##游标对象 + +这步跟mysql也类似,要建立游标对象。 + + >>> cur = conn.cursor() + +接下来对数据库内容的操作,都是用游标对象方法来实现了: + + >>> dir(cur) + ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'arraysize', 'close', 'connection', 'description', 'execute', 'executemany', 'executescript', 'fetchall', 'fetchmany', 'fetchone', 'lastrowid', 'next', 'row_factory', 'rowcount', 'setinputsizes', 'setoutputsize'] + +是不是看到熟悉的名称了:`close(), execute(), executemany(), fetchall()` + +###创建数据库表 + +在mysql中,我们演示的是利用mysql的shell来创建的表。其实,当然可以使用sql语句,在python中实现这个功能。这里对sqlite数据库,就如此操作一番。 + + >>> create_table = "create table books (title text, author text, lang text) " + >>> cur.execute(create_table) + + +这样就在数据库23301.db中建立了一个表books。对这个表可以增加数据了: + + >>> cur.execute('insert into books values ("from beginner to master", "laoqi", "python")') + + +为了保证数据能够保存,还要(这是多么熟悉的操作流程和命令呀): + + >>> conn.commit() + >>> cur.close() + >>> conn.close() + +支持,刚才建立的那个数据库中,已经有了一个表books,表中已经有了一条记录。 + +整个流程都不陌生。 + +###查询 + +存进去了,总要看看,这算强迫症吗? + + >>> conn = sqlite3.connect("23301.db") + >>> cur = conn.cursor() + >>> cur.execute('select * from books') + + >>> print cur.fetchall() + [(u'from beginner to master', u'laoqi', u'python')] + +###批量插入 + +多增加点内容,以便于做别的操作: + + >>> books = [("first book","first","c"), ("second book","second","c"), ("third book","second","python")] + +这回来一个批量插入 + + >>> cur.executemany('insert into books values (?,?,?)', books) + + >>> conn.commit() + +用循环语句打印一下查询结果: + + >>> rows = cur.execute('select * from books') + >>> for row in rows: + ... print row + ... + (u'from beginner to master', u'laoqi', u'python') + (u'first book', u'first', u'c') + (u'second book', u'second', u'c') + (u'third book', u'second', u'python') + +###更新 + +正如前面所说,在cur.execute()中,你可以写SQL语句,来操作数据库。 + + >>> cur.execute("update books set title='physics' where author='first'") + + >>> conn.commit() + +按照条件查处来看一看: + + >>> cur.execute("select * from books where author='first'") + + >>> cur.fetchone() + (u'physics', u'first', u'c') + +###删除 + +在sql语句中,这也是常用的。 + + >>> cur.execute("delete from books where author='second'") + + >>> conn.commit() + + >>> cur.execute("select * from books") + + >>> cur.fetchall() + [(u'from beginner to master', u'laoqi', u'python'), (u'physics', u'first', u'c')] + +不要忘记,在你完成对数据库的操作是,一定要关门才能走人: + + >>> cur.close() + >>> conn.close() + +作为基本知识,已经介绍差不多了。当然,在实践的编程中,或许会遇到问题,就请读者多参考官方文档:[https://docs.python.org/2/library/sqlite3.html](https://docs.python.org/2/library/sqlite3.html) + +------ + +[总目录](./index.md)   |   [上节:MongoDB数据库](./232.md)   |   [下节:电子表格](./234.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/23301.db b/2code/23301.db new file mode 100644 index 0000000000000000000000000000000000000000..3a102e7ec4e7dbc34d9ded37927d1f507c21590a GIT binary patch literal 2048 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|$|OfWeIxjKfpDug&X`M4^8 zg%mVOGD~t&6-rVoN^}$wOG`5Hi=dpG#JqGcQxlXonV1hTGv8o7%G}4?M~Tx$^^S(X zXb4ak0w#F$OW=?bWMYvP=P$^pEY3_WPRlGRE=g8nWU&^POe@OIRY*!r&&$|OfWeIxjKfpDug&X`M4^8 zg%mVOGD~t&6-rVoN^}$wOG`5Hi=dpG#JqGcQxlXonV1hTGv8o7%G}4?M~Tx$^^S(X zXb4ak0w#F$OW=?bWMYvP=P$^pEY3_WPRlGRE=g8nWU&^POe@OIRY*!r&&MySQL概况,安装,python连接MySQL模块和方法 3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 4. [MongoDB数据库](./232.md)==>mongodb的安装启动,pymongo模块:连接客户端,数据库的增删改查操作 +5. [SQLite数据库](./233.md)==>通过sqlite3模块操作SQLite数据库:连接对象方法,游标对象方法,数据库增删改查 #第叁季 实战 From 0a2c859f20873cbd4fb3544208cdcf6f03eba038 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 17:09:52 +0800 Subject: [PATCH 010/376] modify --- 123.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/123.md b/123.md index f508d25..6cc8d4e 100644 --- a/123.md +++ b/123.md @@ -1,6 +1,6 @@ >"But be on your guard so that your hearts are not wighted down with dissipation and drunkenness and the worries of this life, and that day close down upon you suddenly like a trap. For it will overtake all who live on the face of the whole earht. But staty alert at all times, praying that you may have strength to eacape all these things that must happen, and to stand before the Son of Man." ->你们要谨慎,恐怕因贪食醉酒并今生的思虑,累住你们的心,那日子就如同网罗忽然临到你们。因为那日子要这样临到全地上一切居住的人。你们要是是儆醒,常常祈求,是你们能逃避这一切要来的事,得以站立在人子面前。(LUKE 21:34-36) +>你们要谨慎,恐怕因贪食醉酒并今生的思虑,累住你们的心,那日子就如同网罗忽然临到你们。因为那日子要这样临到全地上一切居住的人。你们要时时儆醒,常常祈求,是你们能逃避这一切要来的事,得以站立在人子面前。(LUKE 21:34-36) #语句(3) From dc2386805e20409682ae657898b466eb3050b64a Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 17:10:25 +0800 Subject: [PATCH 011/376] python excel --- 234.md | 272 ++++++++++++++++++++++++++++++++++++++++++++++ 2code/23401.xlsx | Bin 0 -> 5965 bytes 2images/23401.jpg | Bin 0 -> 99180 bytes index.md | 2 +- 4 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 234.md create mode 100644 2code/23401.xlsx create mode 100644 2images/23401.jpg diff --git a/234.md b/234.md new file mode 100644 index 0000000..07c0ed6 --- /dev/null +++ b/234.md @@ -0,0 +1,272 @@ +>人若自洁,脱离卑贱的事,就必作贵重的器皿,成为圣洁,合乎主用,预备行各样的善事。你要逃避少年的私欲,同那清心祷告主的人追求公义、信德、仁爱、和平。惟有那愚拙无学问的辩论,总要弃绝,因为知道这等事是起争竞的。(2 TIMOTHY 2:21-23) + +#电子表格 + +一提到电子表格,可能立刻想到的是excel。殊不知,电子表格,还是“历史悠久”的呢,比word要长久多了。根据维基百科的记载整理一个简史: + +>VisiCalc是第一个电子表格程序,用于苹果II型电脑。由丹·布李克林(Dan Bricklin)和鮑伯·法蘭克斯頓(Bob Frankston)發展而成,1979年10月跟著蘋果二號電腦推出,成為蘋果二號電腦上的「殺手應用軟體」。 + +>接下来是Lotus 1-2-3,由Lotus Software(美國蓮花軟體公司)於1983年起所推出的電子試算表軟體,在DOS時期廣為個人電腦使用者所使用,是一套殺手級應用軟體。也是世界上第一个销售超过100万套的软件。 + +>然后微软也开始做电子表格,早在1982年,它推出了它的第一款電子制表軟件──Multiplan,並在CP/M系統上大獲成功,但在MS-DOS系統上,Multiplan敗給了Lotus 1-2-3。 + +>1985年,微软推出第一款Excel,但它只用於Mac系統;直到1987年11月,微软的第一款適用於Windows系統的Excel才诞生,不过,它一出来,就与Windows系统直接捆綁,由于此后windows大行其道,并且Lotus1-2-3遲遲不能適用於Windows系統,到了1988年,Excel的銷量超過了1-2-3。 + +>此后就是微软的天下了,Excel后来又并入了Office里面,成为了Microsoft Office Excel。 + +>尽管Excel已经发展了很多代,提供了大量的用戶界面特性,但它仍然保留了第一款電子制表軟件VisiCalc的特性:行、列組成單元格,數據、與數據相關的公式或者對其他單元格的絕對引用保存在單元格中。 + +>由于微软独霸天下,Lotus 1-2-3已经淡出了人们的视线,甚至于误认为历史就是从微软开始的。 + +>其实,除了微软的电子表格,在Linux系统中也有很好的电子表格,google也提供了不错的在线电子表格(可惜某国内不能正常访问)。 + +从历史到现在,电子表格都很广泛的用途。所以,python也要操作一番电子表格,因为有的数据,或许就是存在电子表格中。 + +##openpyl + +openpyl模块是解决Microsoft Excel 2007/2010之类版本中扩展名是Excel 2010 xlsx/xlsm/xltx/xltm的文件的读写的第三方库。(差点上不来气,这句话太长了。) + +###安装 + +安装第三方库,当然用法力无边的pip install + + $ sudo pip install openpyxl + +如果最终看到下面的提示,恭喜你,安装成功。 + + Successfully installed openpyxl jdcal + Cleaning up... + +###workbook和sheet + +第一步,当然是要引入模块,用下面的方式: + + >>> from openpyxl import Workbook + +接下来就用`Workbook()`类里面的方法展开工作: + + >>> wb = Workbook() + +请回忆Excel文件,如果想不起来,就打开Excel,我们第一眼看到的是一个称之为工作簿(workbook)的东西,里面有几个sheet,默认是三个,当然可以随意增删。默认又使用第一个sheet。 + + >>> ws = wb.active + +每个工作簿中,至少要有一个sheet,通过这条指令,就在当前工作簿中建立了一个sheet,并且它是当前正在使用的。 + +还可以在这个sheet后面追加: + + >>> ws1 = wb.create_sheet() + +甚至,还可以加塞: + + >>> ws2 = wb.create_sheet(1) + +排在了第二个位置。 + +在Excel文件中一样,创建了sheet之后,默认都是以"Sheet1"、"Sheet2"样子来命名的,然后我们可以给其重新命名。在这里,依然可以这么做。 + + >>> ws.title = "python" + +ws所引用的sheet对象名字就是"python"了。 + +此时,可以使用下面的方式从工作簿对象中得到sheet + + >>> ws01 = wb['python'] #sheet和工作簿的关系,类似键值对的关系 + >>> ws is ws01 + True + +或者用这种方式 + + >>> ws02 = wb.get_sheet_by_name("python") #这个方法名字也太直接了,方法的参数就是sheet名字 + >>> ws is ws02 + True + +整理一下到目前为止我们已经完成的工作:建立了工作簿(wb),还有三个sheet。还是显示一下比较好: + + >>> print wb.get_sheet_names() + ['python', 'Sheet2', 'Sheet1'] + +Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用了一个加塞的方法。这跟Excel中差不多少,如果sheet命名了,就按照那个名字显示,否则就默认为名字是"Sheet1"形状的(注意,第一个字母大写)。 + +也可以用循环语句,把所有的sheet名字打印出来。 + + >>> for sh in wb: + ... print sh.title + ... + python + Sheet2 + Sheet1 + +如果读者去`dir(wb)`工作簿对象的属性和方法,会发现它具有迭代的特征`__iter__`方法。说明,工作簿是可迭代的。 + +###cell + +为了能够清楚理解填数据的过程,将电子表中约定的名称以下图方式说明: + +![](./2images/23401.jpg) + +对于sheet,其中的cell是它的下级单位。所以,要得到某个cell,可以这样: + + b4 = ws['B4'] + +如果B4这个cell已经有了,用这种方法就是将它的值赋给了变量b4;如果sheet中没有这个cell,那么就创建这个cell对象。 + +请读者注意,当我们打开Excel,默认已经画好了好多cell。但是,在python操作的电子表格中,不会默认画好那样一个表格,一切都要创建之后才有。所以,如果按照前面的操作流程,上面就是创建了B4这个cell,并且把它作为一个对象被b4变量引用。 + +如果要给B4添加数据,可以这么做: + + >>> ws['B4'] = 4444 + +因为b4引用了一个cell对象,所以可以利用这个对象的属性来查看其值: + + >>> b4.value + 4444 + +要获得(或者建立并获得)某个cell对象,还可以使用下面方法: + + >>> a1 = ws.cell("A1") + +或者: + + >>> a2 = ws.cell(row = 2, column = 1) + +刚才已经提到,在建立了sheet之后,内存中的它并没有cell,需要程序去建立。上面都是一个一个地建立,能不能一下建立多个呢?比如要类似下面的: + +|A1|B1|C1| +|A2|B2|C2| +|A3|B3|C3| + +就可以如同切片那样来操作: + + >>> cells = ws["A1":"C3"] + +可以用下面方法看看创建结果: + + >>> tuple(ws.iter_rows("A1:C3")) + ((, , ), + (, , ), + (, , )) + +这是按照横向顺序数过来来的,即A1-B1-C1,然后下一横行。还可以用下面的循环方法,一个一个地读到每个cell对象: + + >>> for row in ws.iter_rows("A1:C3"): + ... for cell in row: + ... print cell + ... + + + + + + + + + + +也可以用sheet对象的`rows`属性,得到按照横向顺序依次排列的cell对象(注意观察结果,因为没有进行范围限制,所以是目前sheet中所有的cell,前面已经建立到第四行了B4,所以,要比上面的操作多一个row): + + >>> ws.rows + ((, , ), + (, , ), + (, , ), + (, , )) + +用sheet对象的`columns`属性,得到的是按照纵向顺序排列的cell对象(注意观察结果): + + >>> ws.columns + ((, , , ), + (, , , ), + (, , , )) + +不管用那种方法,只要得到了cell对象,接下来就可以依次赋值了。比如要将上面的表格中,依次填写上1,2,3,... + + >>> i = 1 + >>> for cell in ws.rows: + ... cell.value = i + ... i += 1 + ... + Traceback (most recent call last): + File "", line 2, in + AttributeError: 'tuple' object has no attribute 'value' + +报错了。什么错误。关键就是没有注意观察上面的结果。tuple里面是以tuple为元素,再里面才是cell对象。所以,必须要“时时警醒”,常常谨慎。 + + >>> for row in ws.rows: + ... for cell in row: + ... cell.value = i + ... i += 1 + ... + +如此,就给每个cell添加了数据。查看一下,不过要换一个属性: + + >>> for col in ws.columns: + ... for cell in col: + ... print cell.value + ... + 1 + 4 + 7 + 10 + 2 + 5 + 8 + 11 + 3 + 6 + 9 + 12 + +虽然看着有点不舒服,但的确达到了前面的要求。 + +###保存 + +把辛苦工作的结果保存一下吧。 + + >>> wb.save("23401.xlsx") + +如果有同名文件存在,会覆盖。 + +###读取已有文件 + +如果已经有一个.xlsx文件,要读取它,可以这样来做: + + >>> from openpyxl import load_workbook + >>> wb2 = load_workbook("23401.xlsx") + >>> print wb2.get_sheet_names() + ['python', 'Sheet2', 'Sheet1'] + >>> ws_wb2 = wb2["python"] + >>> for row in ws_wb2.rows: + ... for cell in row: + ... print cell.value + ... + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + +很好,就是这个文件。 + +##其它第三方库 + +针对电子表格的第三方库,除了上面这个openpyxl之外,还有别的,列出几个,供参考,使用方法大同小异。 + +- xlsxwriter:针对Excel 2010格式,如.xlsx,官方网站:https://xlsxwriter.readthedocs.org/,这个官方文档写的图文并茂。非常好读。 + +下面两个用来处理.xls格式的电子表表格。 + +- xlrd:网络文件:https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966 +- xlwt:网络文件:http://xlwt.readthedocs.org/en/latest/ + +------ + +[总目录](./index.md)   |   [上节:SQLite数据库](./233.md)   |   [下节:网站概述](./301.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/23401.xlsx b/2code/23401.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c52b2ff22ab3b8c7734936b50494c032379f057d GIT binary patch literal 5965 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 literal 0 HcmV?d00001 diff --git a/index.md b/index.md index d388321..b89c737 100644 --- a/index.md +++ b/index.md @@ -97,7 +97,7 @@ 3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 4. [MongoDB数据库](./232.md)==>mongodb的安装启动,pymongo模块:连接客户端,数据库的增删改查操作 5. [SQLite数据库](./233.md)==>通过sqlite3模块操作SQLite数据库:连接对象方法,游标对象方法,数据库增删改查 - +6. [电子表格](./234.md)==>python操作Excel文件的第三方库openpyxl使用方法,以及其它与Excel相关的第三方库 #第叁季 实战 From cafa38b55a27eadfffdd82b1b93bcfa504d40085 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 17:13:48 +0800 Subject: [PATCH 012/376] python excel --- 234.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/234.md b/234.md index 07c0ed6..61bb0b0 100644 --- a/234.md +++ b/234.md @@ -258,7 +258,7 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用 针对电子表格的第三方库,除了上面这个openpyxl之外,还有别的,列出几个,供参考,使用方法大同小异。 -- xlsxwriter:针对Excel 2010格式,如.xlsx,官方网站:https://xlsxwriter.readthedocs.org/,这个官方文档写的图文并茂。非常好读。 +- xlsxwriter:针对Excel 2010格式,如.xlsx,官方网站:[https://xlsxwriter.readthedocs.org/](https://xlsxwriter.readthedocs.org/),这个官方文档写的图文并茂。非常好读。 下面两个用来处理.xls格式的电子表表格。 From 81d6f99dfbad5285c2a8750938a21979e0807376 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 19:20:40 +0800 Subject: [PATCH 013/376] python excel --- 234.md | 4 ++++ 2images/23402.jpg | Bin 0 -> 18975 bytes 2 files changed, 4 insertions(+) create mode 100644 2images/23402.jpg diff --git a/234.md b/234.md index 61bb0b0..a6c3d81 100644 --- a/234.md +++ b/234.md @@ -226,6 +226,10 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用 如果有同名文件存在,会覆盖。 +此时,可以用Excel打开这个文件,看看可视化的结果: + +![](./2images/23402.jpg) + ###读取已有文件 如果已经有一个.xlsx文件,要读取它,可以这样来做: diff --git a/2images/23402.jpg b/2images/23402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00ce8f4713fe4b0ba8d4843dd80e5402e5418eb7 GIT binary patch literal 18975 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 Date: Tue, 12 May 2015 20:14:12 +0800 Subject: [PATCH 014/376] python excel --- 234.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/234.md b/234.md index a6c3d81..6da1d0a 100644 --- a/234.md +++ b/234.md @@ -271,6 +271,6 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用 ------ -[总目录](./index.md)   |   [上节:SQLite数据库](./233.md)   |   [下节:网站概述](./301.md) +[总目录](./index.md)   |   [上节:SQLite数据库](./233.md)   |   [下节:实战-引](./300.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file From ca8dafa721ea1be8d764aedb0af040f11dfc3daa Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 20:14:35 +0800 Subject: [PATCH 015/376] doit --- 300.md | 15 +++++++++++++++ index.md | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 300.md diff --git a/300.md b/300.md new file mode 100644 index 0000000..c3c80cc --- /dev/null +++ b/300.md @@ -0,0 +1,15 @@ +>然而主的仆人不可争竞;只要温温和和地待众人,善于教导,存心忍耐,用温柔劝诫那抵挡的人,或者神给他们悔改的心,可以明白真道,叫他们这已经被魔鬼任意掳去的可以醒悟,脱离他的罗网。(2 TIMOTHY 2:24-26) + +#实战 + +通过前面的学习,已经掌握了python的基本内容,不少读者可能此时已经跃跃欲试,迫切地想用已经掌握的技术去搞点什么东西。 + +本季就是要出点一些实战的东西。 + +首先声明,因为仍然是教程,所以在实战中的所有例子,可能举例真正的工程代码要求还有一定的举例,比如可能没有非常优化、或者某些语句和方法使用还有进一步推敲之处。也盼望读者能够指出不足,必改正。 + +------ + +[总目录](./index.md)   |   [上节:电子表格](./234.md)   |   [下节:网站技术概述](./301.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index b89c737..fcb475d 100644 --- a/index.md +++ b/index.md @@ -101,6 +101,8 @@ #第叁季 实战 +0. [引](./300.md) + ##第捌章 用Tornado做网站 ##第五部分:科学计算 From e60bf921100ca09f85008cbaf884e4ac93dd0a48 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 13 May 2015 10:36:32 +0800 Subject: [PATCH 016/376] prepare for website --- 300.md | 2 +- 301.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 2 ++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 301.md diff --git a/300.md b/300.md index c3c80cc..1f86d34 100644 --- a/300.md +++ b/300.md @@ -10,6 +10,6 @@ ------ -[总目录](./index.md)   |   [上节:电子表格](./234.md)   |   [下节:网站技术概述](./301.md) +[总目录](./index.md)   |   [上节:电子表格](./234.md)   |   [下节:为做网站而准备](./301.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/301.md b/301.md new file mode 100644 index 0000000..e55d4c3 --- /dev/null +++ b/301.md @@ -0,0 +1,104 @@ +>圣经都是神所默示的,于教训、督责、使人归正、教导人学义都是有益的,叫属神的人得以完全,预备行各样的善事。(2 TIMOTHY 3:16-17) + +#为做网站而准备 + +作为一个程序猿一定要会做网站。这也不一定吧,貌似是,但是,如果被人问及此事,如果说自己不会,的确羞愧难当呀。所以,本教程要讲一讲如何做网站。 + +>推荐阅读:[History of the World Wide Web](http://en.wikipedia.org/wiki/History_of_the_World_Wide_Web) + +首先,为自己准备一个服务器。这个要求似乎有点过分,作为一个普通的穷苦聊到的程序员,哪里有铜钿来购买服务器呢?没关系,不够买服务器也能做网站,可以购买云服务空间或者虚拟空间,这个在网上搜搜,很多。如果购买这个的铜钿也没有,还可以利用自己的电脑(这总该有了)作为服务服务器。我就是利用一台装有ubuntu操作系统的个人电脑作为本教程的案例演示服务器。 + +然后,要在这个服务器上做一些程序配置。一些必备的网络配置这里就不说了,比如我用的ubuntu系统,默认情况都有了。如果读者遇到一些问题,可以搜一下,网上资料多多。另外的配置就是python开发环境,这个应该也有了,前面已经在用了。 + +接下来,要安装一个框架。本教程中制作网站的案例采用tornado框架。 + +在安装这个框架之前,先了解一些相关知识。 + +##开发框架 + +对框架的认识,由于工作习惯和工作内容的不同,有很大差异,这里姑且截取[维基百科中的一种定义](http://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%A1%86%E6%9E%B6),之所以要给出一个定义,无非是让看官有所了解,但是是否知道这个定义,丝毫不影响后面的工作。 + +>软件框架(Software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。 + +>框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。 + +>简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说就是使用别人搭好的舞台,你来做表演。 + +我比较喜欢最后一句的解释,别人搭好舞台,我来表演。这也就是说,如果在做软件开发的时候,能够减少工作量。就做网站来讲,其实需要做的事情很多,但是如果有了开发框架,很多底层的事情就不需要做了(都有哪些底层的事情呢?读者能否回答?)。 + +有高手工程师鄙视框架,认为自己编写的才是王道。这方面不争论,框架是开发中很流行的东西,我还是固执地认为用框架来开发,更划算。 + +##python框架 + +有人说php(什么是php,严肃的说法,这是另外一种语言,更高雅的说法,是某个活动的汉语拼音简称)框架多,我不否认,php的开发框架的确很多很多。不过,python的web开发框架,也足够使用了,列举几种常见的web框架: + +- Django:这是一个被广泛应用的框架。在网上搜索,会发现很多公司在招聘的时候就说要会这个。框架只是辅助,真正的程序员,用什么框架,都应该是根据需要而来。当然不同框架有不同的特点,需要学习一段时间。 +- Flask:一个用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。 +- Web2py:是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。 +- Bottle: 微型Python Web框架,遵循WSGI,说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。 +- Tornado:全称是Tornado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。 +- webpy: 轻量级的Python Web框架。webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。 + +说明:以上信息选自:http://blog.jobbole.com/72306/ ,这篇文章中还有别的框架,由于不是web框架,我没有选摘,有兴趣的去阅读。 + +##Tornado + +本教程中将选择使用Tornado框架。此前有朋友建议我用Django,首先它是一个好东西。但是,我更愿意用Tornado,为什么呢?因为......,看下边或许是理由,或许不是。 + +Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架以开源软件形式开放给大众。看来Tornado的出身高贵呀,对了,某国可能风闻有Facebook,但是要一睹其芳容,还要努力。 + +用哪个框架,一般是要结合项目而定。我之选用Tornado的原因,就是看中了它在性能方面的优异表现。 + +Tornado的性能是相当优异的,因为它试图解决一个被称之为“C10k”问题,就是处理大于或等于一万的并发。一万呀,这可是不小的量。(关于C10K问题,看官可以浏览:[C10k problem](http://en.wikipedia.org/wiki/C10k_problem)) + +下表是和一些其他Web框架与服务器的对比,供看官参考(数据来源: [https://developers.facebook.com/blog/post/301](https://developers.facebook.com/blog/post/301) ) + +条件:处理器为 AMD Opteron, 主频2.4GHz, 4核 + +|服务| 部署 | 请求/每秒| +|----|-------|-----------| +|Tornado| nginx, 4进程|8213| +|Tornado|1个单线程进程|3353| +|Django|Apache/mod_wsgi|2223| +|web.py|Apache/mod_wsgi|2066| +|CherryPy|独立|785| + +看了这个对比表格,还有什么理由不选择Tornado呢? + +就是它了——**Tornado** + +##安装Tornado + +Tornado的官方网站:[http://www.tornadoweb.org](http://www.tornadoweb.org/en/latest/) + +我在自己电脑中(是我目前使用的服务器),用下面方法安装,只需要一句话即可: + + pip install tornado + +这是因为Tornado已经列入PyPI,因此可以通过 pip 或者 easy_install 来安装。 + +如果不用这种方式安装,下面的页面中有可以供看官下载的最新源码版本和安装方式:[https://pypi.python.org/pypi/tornado/](https://pypi.python.org/pypi/tornado/) + +此外,在github上也有托管,看官可以通过上述页面进入到github看源码。 + +我没有在windows操作系统上安装过这个东西,不过,在官方网站上有一句话,可能在告诉读者一些信息: + +>Tornado will also run on Windows, although this configuration is not officially supported and is recommended only for development use. + +特别建议,在真正的工程中,网站的服务器还是用Linux比较好,你懂得(吗?)。 + +##技术准备 + +除了做好上述准备之外,还要有点技术准备: + +- HTML +- CSS +- JavaScript + +我们在后面实例中,不会搞太复杂的界面和JavaScript(JS)操作,所以,只需要基本知识即可。 + +------ + +[总目录](./index.md)   |   [上节:实战-引](./300.md)   |   [下节:分析Hello,World](./302.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index fcb475d..d5db7d0 100644 --- a/index.md +++ b/index.md @@ -105,6 +105,8 @@ ##第捌章 用Tornado做网站 +1. [为做网站而准备](./301.md)==>开发框架,python的常用web框架,tornado框架介绍和安装 + ##第五部分:科学计算 ##附:网络文摘 From 35672ff55080949a4ceb7272b846994387d006dd Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 13 May 2015 21:17:15 +0800 Subject: [PATCH 017/376] hello --- 301.md | 2 +- 302.md | 205 ++++++++++++++++++++++++++++++++++++++++++++++ 3code/hello.py | 22 +++++ 3images/30201.png | Bin 0 -> 13218 bytes 3images/30202.png | Bin 0 -> 120747 bytes index.md | 1 + 6 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 302.md create mode 100644 3code/hello.py create mode 100644 3images/30201.png create mode 100644 3images/30202.png diff --git a/301.md b/301.md index e55d4c3..41ff144 100644 --- a/301.md +++ b/301.md @@ -99,6 +99,6 @@ Tornado的官方网站:[http://www.tornadoweb.org](http://www.tornadoweb.org/e ------ -[总目录](./index.md)   |   [上节:实战-引](./300.md)   |   [下节:分析Hello,World](./302.md) +[总目录](./index.md)   |   [上节:实战-引](./300.md)   |   [下节:分析Hello](./302.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/302.md b/302.md new file mode 100644 index 0000000..406929f --- /dev/null +++ b/302.md @@ -0,0 +1,205 @@ +>As he walked by the sea of Galilee, he saw two brothers, Simon, who is called Peter, and Andrew his brother, casting a net into the sea--for they were fishermen. And he said to them,"Follow me, and I will make you fish for people." Immediately they left their nets and followed him.(MATTHEW 5:18-20) + +#分析Hello + +打开你写python代码用的编辑器,不要问为什么,把下面的代码一个字不差地录入进去,并命名保存为hello.py(目录自己任意定)。 + + #!/usr/bin/env python + #coding:utf-8 + + import tornado.httpserver + import tornado.ioloop + import tornado.options + import tornado.web + + from tornado.options import define, options + define("port", default=8000, help="run on the given port", type=int) + + class IndexHandler(tornado.web.RequestHandler): + def get(self): + greeting = self.get_argument('greeting', 'Hello') + self.write(greeting + ', welcome you to read: www.itdiffer.com') + + if __name__ == "__main__": + tornado.options.parse_command_line() + app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) + http_server = tornado.httpserver.HTTPServer(app) + http_server.listen(options.port) + tornado.ioloop.IOLoop.instance().start() + +进入到保存hello.py文件的目录,执行: + + $ python hello.py + +用python运行这个文件,其实就已经发布了一个网站,只不过这个网站太简单了。 + +接下来,打开浏览器,在浏览器中输入:http://localhost:8000,得到如下界面: + +![](./3images/30201.png) + +我在ubuntu的shell中还可以用下面方式运行: + + $ curl http://localhost:8000/ + Hello, welcome you to read: www.itdiffer.com + + $ curl http://localhost:8000/?greeting=Qiwsir + Qiwsir, welcome you to read: www.itdiffer.com + +此操作,读者可以根据自己系统而定。 + +恭喜你,迈出了决定性一步,已经可以用Tornado发布网站了。在这里似乎没有做什么部署,只是安装了Tornado。是的,不需要多做什么,因为Tornado就是一个很好的server,也是一个开发框架。 + +下面以这个非常简单的网站为例,对用tornado做的网站的基本结构进行解释。 + +##WEB服务器工作流程 + +任何一个网站都离不开Web服务器,这里所说的不是指那个更计算机一样的硬件设备,是指里面安装的软件,有时候初次接触的看官容易搞混。就来伟大的[维基百科都这么说](http://zh.wikipedia.org/wiki/%E6%9C%8D%E5%8A%A1%E5%99%A8): + +>有时,这两种定义会引起混淆,如Web服务器。它可能是指用于网站的计算机,也可能是指像Apache这样的软件,运行在这样的计算机上以管理网页组件和回应网页浏览器的请求。 + +在具体的语境中,看官要注意分析,到底指的是什么。 + +关于Web服务器比较好的解释,推荐看看百度百科的内容,我这里就不复制粘贴了,具体可以点击连接查阅:[WEB服务器](http://baike.baidu.com/view/460250.htm) + +在WEB上,用的最多的就是输入网址,访问某个网站。全世界那么多网站网页,如果去访问,怎么能够做到彼此互通互联呢。为了协调彼此,就制定了很多通用的协议,其中http协议,就是网络协议中的一种。关于这个协议的介绍,网上随处就能找到,请自己google. + +网上偷来的[一张图](http://kenby.iteye.com/blog/1159621)(从哪里偷来的,我都告诉你了,多实在呀。哈哈。),显示在下面,简要说明web服务器的工作过程 + +![](./3images/30202.png) + +偷个彻底,把原文中的说明也贴上: + +1. 创建listen socket, 在指定的监听端口, 等待客户端请求的到来 +2. listen socket接受客户端的请求, 得到client socket, 接下来通过client socket与客户端通信 +3. 处理客户端的请求, 首先从client socket读取http请求的协议头, 如果是post协议, 还可能要读取客户端上传的数据, 然后处理请求, 准备好客户端需要的数据, 通过client socket写给客户端 + +##引入模块 + + import tornado.httpserver + import tornado.ioloop + import tornado.options + import tornado.web + +这四个都是Tornado的模块,在本例中都是必须的。它们四个在一般的网站开发中,都要用到,基本作用分别是: + +- tornado.httpserver:这个模块就是用来解决web服务器的http协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado的非阻塞、单线程的特点在这个模块中体现。 +- tornado.ioloop:这个也非常重要,能够实现非阻塞socket循环,不能互通一次就结束呀。 +- tornado.options:这是命令行解析模块,也常用到。 +- tornado.web:这是必不可少的模块,它提供了一个简单的Web框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。 + +读者看到这里可能有点莫名其妙,对一些属于不理解。没关系,你可以先不用管它,如果愿意管,就把不理解属于放到google立面查查看。一定要硬着头皮一字一句地读下去,随着学习和实践的深入,现在不理解的以后就会逐渐领悟理解的。 + +还有一个模块引入,是用from...import完成的 + + from tornado.options import define, options + define("port", default=8000, help="run on the given port", type=int) + +这两句就显示了所谓“命令行解析模块”的用途了。在这里通过`tornado.options.define()`定义了访问本服务器的端口,就是当在浏览器地址栏中输入`http:localhost:8000`的时候,才能访问本网站,因为http协议默认的端口是80,为了区分,我在这里设置为8000,为什么要区分呢?因为我的计算机或许你的也是,已经部署了别(或许是Nginx、Apache)服务器了,它的端口是80,所以要区分开(也可能是故意不用80端口),并且,后面我们还会将tornado和Nginx联合起来工作,这样两个服务器在同一台计算机上,就要分开喽。 + +##定义请求-处理程序类 + + class IndexHandler(tornado.web.RequestHandler): + def get(self): + greeting = self.get_argument('greeting', 'Hello') + self.write(greeting + ', welcome you to read: www.itdiffer.com') + +所谓“请求处理”程序类,就是要定义一个类,专门应付客户端(就是你打开的那个浏览器界面)向服务器提出的请求(这个请求也许是要读取某个网页,也许是要将某些信息存到服务器上),服务器要有相应的程序来接收并处理这个请求,并且反馈某些信息(或者是针对请求反馈所要的信息,或者返回其它的错误信息等)。 + +于是,就定义了一个类,名字是IndexHandler,当然,名字可以随便取了,但是,按照习惯,类的名字中的单词首字母都是大写的,并且如果这个类是请求处理程序类,那么就最好用Handler结尾,这样在名称上很明确,是干什么的。 + +类IndexHandler继承`tornado.web.RequestHandler`,其中再定义`get()`和`post()`两个在web中应用最多的方法的内容(关于这两个方法的详细解释,可以参考:[HTTP GET POST的本质区别详解](https://github.com/qiwsir/ITArticles/blob/master/Tornado/DifferenceHttpGetPost.md),作者在这篇文章中,阐述了两个方法的本质)。 + +在本例中,只定义了一个`get()`方法。 + +用`greeting = self.get_argument('greeting', 'Hello')`的方式可以得到url中传递的参数,比如 + + $ curl http://localhost:8000/?greeting=Qiwsir + Qiwsir, welcome you to read: www.itdiffer.com + +就得到了在url中为greeting设定的值Qiwsir。如果url中没有提供值,就是Hello. + +官方文档对这个方法的描述如下: + +>RequestHandler.get_argument(name, default=, []strip=True) + +>Returns the value of the argument with the given name. + +>If default is not provided, the argument is considered to be required, and we raise a MissingArgumentError if it is missing. + +>If the argument appears in the url more than once, we return the last value. + +>The returned value is always unicode. + +接下来的那句`self.write(greeting + ',weblcome you to read: www.itdiffer.com)'`中,`write()`方法主要功能是向客户端反馈信息。也浏览一下官方文档信息,对以后正确理解使用有帮助: + +>RequestHandler.write(chunk)[source] + +>Writes the given chunk to the output buffer. + +>To write the output to the network, use the flush() method below. + +>If the given chunk is a dictionary, we write it as JSON and set the Content-Type of the response to be application/json. (if you want to send JSON as a different Content-Type, call set_header after calling write()). + +##main()方法 + +`if __name__ == "__main__"`,这个方法跟以往执行python程序是一样的。 + +`tornado.options.parse_command_line()`,这是在执行tornado的解析命令行。在tornado的程序中,只要import模块之后,就会在运行的时候自动加载,不需要了解细节,但是,在main()方法中如果有命令行解析,必须要提前将模块引入。 + +##Application类 + +下面这句是重点: + + app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) + +将tornado.web.Application类实例化。这个实例化,本质上是建立了整个网站程序的请求处理集合,然后它可以被HTTPServer做为参数调用,实现http协议服务器访问。Application类的`__init__`方法参数形式: + + def __init__(self, handlers=None, default_host="", transforms=None,**settings): + pass + +在一般情况下,handlers是不能为空的,因为Application类通过这个参数的值处理所得到的请求。例如在本例中,`handlers=[(r"/", IndexHandler)]`,就意味着如果通过浏览器的地址栏输入根路径(`http://localhost:8000`就是根路径,如果是`http://localhost:8000/qiwsir`,就不属于根,而是一个子路径或目录了),对应着就是让名字为IndexHandler类处理这个请求。 + +通过handlers传入的数值格式,一定要注意,在后面做复杂结构的网站是,这里就显得重要了。它是一个list,list里面的元素是tuple,tuple的组成包括两部分,一部分是请求路径,另外一部分是处理程序的类名称。注意请求路径可以用正则表达式书写(关于正则表达式,后面会进行简要介绍)。举例说明: + + handlers = [ + (r"/", IndexHandlers), #来自根路径的请求用IndesHandlers处理 + (r"/qiwsir/(.*)", QiwsirHandlers), #来自/qiwsir/以及其下任何请求(正则表达式表示任何字符)都由QiwsirHandlers处理 + ] + +**注意** + +在这里我使用了`r"/"`的样式,意味着就不需要使用转义符,r后面的都表示该符号本来的含义。例如,\n,如果单纯这么来使用,就以为着换行,因为符号“\”具有转义功能(关于转义详细阅读[《字符串(1)》](./106.md)),当写成`r"\n"`的形式是,就不再表示换行了,而是两个字符,\和n,不会转意。一般情况下,由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。 + +关于Application类的介绍,告一段落,但是并未完全讲述了,因为还有别的参数设置没有讲,请继续关注后续内容。 + +##HTTPServer类 + +实例化之后,Application对象(用app做为标签的)就可以被另外一个类HTTPServer引用,形式为: + + http_server = tornado.httpserver.HTTPServer(app) + +HTTPServer是tornado.httpserver里面定义的类。HTTPServer是一个单线程非阻塞HTTP服务器,执行HTTPServer一般要回调Application对象,并提供发送响应的接口,也就是下面的内容是跟随上面语句的(options.port的值在IndexHandler类前面通过from...import..设置的)。 + + http_server.listen(options.port) + +这种方法,就建立了单进程的http服务。 + +请看官牢记,如果在以后编码中,遇到需要多进程,请参考官方文档说明:http://tornado.readthedocs.org/en/latest/httpserver.html#http-server + +##IOLoop类 + +剩下最后一句了: + + tornado.ioloop.IOLoop.instance().start() + +这句话,总是在`__main()__`的最后一句。表示可以接收来自HTTP的请求了。 + +以上把一个简单的hello.py剖析。想必读者对Tornado编写网站的基本概念已经有了。 + +如果一头雾水,也不要着急,以来将上面的内容多看几遍。对整体结构有一个基本了解,不要拘泥于细节或者某些词汇含义。然后即继续学习。 + +------ + +[总目录](./index.md)   |   [上节:为做网站而准备](./301.md)   |   [下节:用tornado做网站(1)](./303.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/3code/hello.py b/3code/hello.py new file mode 100644 index 0000000..0b7e126 --- /dev/null +++ b/3code/hello.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# coding=utf-8 + +import tornado.httpserver +import tornado.ioloop +import tornado.options +import tornado.web + +from tornado.options import define, options +define("port", default=8000, help="run on the given port", type=int) + +class IndexHandler(tornado.web.RequestHandler): + def get(self): + greeting = self.get_argument('greeting', 'Helloi World') + self.write(greeting + '\nwelcome you to read: www.itdiffer.com') + +if __name__ == "__main__": + tornado.options.parse_command_line() + app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) + http_server = tornado.httpserver.HTTPServer(app) + http_server.listen(options.port) + tornado.ioloop.IOLoop.instance().start() diff --git a/3images/30201.png b/3images/30201.png new file mode 100644 index 0000000000000000000000000000000000000000..57866676bd84b1e8b109bc9c48f20f283e24f79f GIT binary patch literal 13218 zcmeHu_g7O}+bxLYSO5{E3MjpbfOIe(>AeP|E4{bSOF%jFru2@~(2){)5kWdZzz_)~ zNDIA%BtRhCocFtbz<0;EKfW0w$=EA9*=s#zK65^6Cr(dCmGU0*Ju)&fN_90Q12Qu5 zLekUyuN$P1cE-Fz(i;Wnjk?iafBm)aM|XvEc-KqK6huZwHTdt7JVTI*g^cVenYz;7 zMuGYJOF^Nu_QX3!hvMqFFSo-`>1-|O1eebPY0CQjw|-b|ytO>?w+v9Wn6o^*h4Aaq zqj`L+^x@;jr)?1oKI37~*Ttv3c@@rL;!}qy&ToRtD4&1niAJo;u&nF#73}GMqG0Y$TT?Vo3n-AIt?tkD?KiH0o72WK(nf^s7q_(;m zXU#FQ?OR=~k?MPSb}UDHVVYUMlQs7Pzu$7 zb#SSh-K7b7^)oZ#QToHrb7qzH%c4VE>IOgwKEA-;U;k(Vtlucfs{4rC{1$+I=x!$1 zGSBQd8C)E2xUA)xpk)Be0O{m2iWZcu2{;bMcA3@T-fko^YUq_@w98?U6!kvpsV$?i zw6;PVVq(uF{Rb|vDy8huy<*A8EiUw+T^ax9I@@b%qvwvxb?;JNsT=z%8xiHy z!!%iY83~Cx-J)0dHHkDdXbU(J!X;WUw`UHu!H5c~YXKj-GsA%O$areEg|O-mw0N`c zKzvE4z#q6dAUOQ|nMXP@{RmkK@Q~AUK?6KT_cQsRs^CTcFJ=1NIvUvC24go_W5{KS z=4R`R;zGdVw{VQXK#^sMk;m26)ke%{Sy!bi;$EIP6=wj*hqBgN-9|}Xju)co(`1-A zRizCw*x57R-7}ZrN5ABZU4K$CIlbO~c_Mguc`1#aTyuT?Z*B_SYJFGR#0E zL{SI8`RYr5`D-wOL?*KymHQx~_5UUC6licGrOIh2Xj_=7^gd3!J1TE zom-GLz?f#?D_hXz=cAJ!n_b3g+^)J98~Zjv8EU>7)IMz*XV3u(E3|HK?KCg**C@Mw zKgycXQu(r=h&#lR3ho(>$q5LEN-V@RFccDI;X`$Y3V7IaL0%ua&{r5#5kvVEQ6xMh zP-|jZS={=qAqOp5`&Q9Z=${0efb%|LPp1;kQ2zf6G|x_5Od%i5_dK8PLH)k<+qO>Q z5!=OFi#;|{HOUdH~|9M#z2){oi^xJUzshA4xNf4T%kNx5M zcl8I%qBa&AN=7}~dk)Dt!FcVQ54Dkg`nJo}0n1}oL^}mu+x0JUg@JZTiT+$+{=8Zt z*Kwx`j%_X5zcQ~{|HO zSEnHsnGhD>>n$w+aP&n%@E7HCar{!YGsm)p)r-~S`rsi({)|b&q>widtHrU&ya`C* z2BC6yy=05Ra2-tI4lj{z*J0b-06-tYvF{aVbE0{cc9!ZbP#Nx!qN|pelu%P&eJ;Gx~Kdv6Aq5}ClX;u34K``A`KA<@l1GBzPi2~ z2~_X9-c90H3E5tjC<31u_4>`#E*NMhIv1fG0Z@26D~s+0zDIaqZ$}3zq#qZXoAQ)} zI{ak4Hshu5jP;>f$wzJW@Rt~V0%%HCONyoqEgX8$vEc(dyngvi;isu3%fl*1t$PQe zJ1}Qk#mR1)Lk3Tg;Ee(gPogkytaE`NY{`5lEAYHb)U>$U4V{Vy1QC0llO{anhHrh2 zuCf=ILeYp48>XoKGO3Q=wf*Rq?`rvNM1PjOL)Jid0x&c9gw4GA{{ABsfCr&!9oc>p z&~ftf4>Kq@MXkpoXv-;5H0)i;XONDa4txFtSU#|2$V1*-N2{rfTE_vvCT*~^6>#*Q zlTzbiV{>MGQs-0dq!`uk>&tSKhY}FH+F{|S$v62HLF+*ifnd!F5?tf=+gz(_94B+j z`84$O^z4)d74VB|LB_wrzW)kCDo9F7a!HqU*G`zXsLOVuqg@s5wZpB-D5p&Ke*{&drT(BImyi>xyCUyk4ka z*O9>LzE`q)kff;*KWjXci%cI$jJ>42c(9eVqx!4Q`W|6-O_2VO{p$C(h)?4cQ+M2 z9dJqb&gXs6_XJHZ@Ov4bZ88mJ6{u?yi@irjk7ery_ZrI$7NOy}E!R2t>kG8IqF6?c z9BXOClETwZGCEo2{7=QyP@#{rpK;A-5yop_ohP^N#XfKWOXd7KQobSC(ffTzzg|4r zc~+3FoUa8l_wV0ZDp#%Q`CNREyKckCOu2kzCFKLi-C4XNSvazfu!=JR_IK~g&^1MCBoNXuayUE+6WAz|BaH8B@(0hux zx}M4dlegNqzS)-cc}M8VdyOB2s+pZ|M}Uhpe1i+D8fLe#NZt~i22kG^7b0qTy_0Be zVJin@nN<~G5x|V^RGRs!RVo@_P%h|$GWd8=w+-25y?5P9A{4T2o1`-&; zU4PS!Se7M7{iJbctxI{!l6x?gmb2V$Tq-J)+@$pVKjzkN4z)Aeg^R+VLP zMJFsXc&>ZEkA@ePni;uikbR=}F+D4< zN~%m%fQhZ4X=6r|qhIq&)&*}QERJSA*J=rMj? z1xpo1(V5-u#G8*_h5oHUFKl6CV#2`22F60Rg(D0wk%jUo{u+ zn_BORNFNzdo1Z7b-K(`aQ2XB3=C~_x#xB$&cMLn;i#j~74)!n^>A$vpRiNS}Tk!t< zdr{HG>gpX|S!Ml}*}stIH+{msJ(94#e0IF~WvyBRtj~1!0?NWrufYzFGWiuv)mdVm zmrBP`vg59qIYfC#-+#aF%1vK?OTsYZ&O44 zXm;Av+^I8hjNYxwm}}49%RW^zJKtFK>mM-uSQekEG9#(YZJ3=S5Pso-hfmK>Yc0H( zs@u#5B_RA{G~4PIG}SG?C;6Nc4JqxYB*bBtCE~QFyS>D{nil=h?h+o~pI^5q8amou zHkmZ6l;@!cLZF$A(V+`lmSxm3or0|3uN8L5V59F+9nGkuf|o+IPD>%?xt&YimZ^Wk zAxRyt{^b2=M#U9K%hv{yKG|D3V1)lj*_~BQ(KzG5Ck3qXP*Drcj5TPAy*Qts&P%v) zTSr@>VE?V<)}6LRA59OBgZ(xX+mj~~GDTwcW2xnuo@`REu$y1PqzWxeI-McgBqSuX9HzDUywgvZZnJ8up;Aqo<){6u=#tve=}E2=XB96SC%Lan(z3Yi1=WUG z*Sen=^O8lsTWS7}|MHH4QJvG;CaM?91ZXc2W@7GJA(bzVUbWdj7}s*LOdX3=6Z^G4 z7PgNugNummUI0*_5bEaj9RV80L{Z1%0958}s!pjND8HjsC&Ta9=`3AFD0UKl*f6>+ zS8l%f4}|Ctj9)7kQE=o0U4Axb@^8t%kQ zZtEWFeXf~1+>W{znD%-V6}lN0UJLp#f6dWfSJb+T4MkaU*Yj|H4v^d7?zQ~J933Z( z9}@w;oh*eG2|Q+r;cvY@W5OpVO1$8(&1y{1^$fNpe!K?n>ccvUTrcQ1V1`JrrbLK^ z>@M-}mOxy5eCJ^=p~e3PV?tb9&1B9Sx806^MQLF7t>1Q(Yx+^f!0ax-F<>t}L_b?2VeL(a(j2 z%gw5~I$YbnX4Kj&QHWl8KEZp4-lK`^lIlgjxUiZ#2jR;am21xV%BWClw)8My(`ZQC z)NW^)<`c(7!hTkD3hu2wuGQ5wd8>(J5Dp824(gvxQa|pO$qEn+ z5|Odqebhzj0$6@_<2VVc$C$6qe`%m-e?I5e*4K;)2~8UkUt7FGhrS}n^3jz3W0pMX@^=L* z*au<%r!dk32n14JZxpYcpVKGgEFu`m1E+~s$ip-tSzm1FrP@%d4&T$#7;PXY~HM93HI70Zeu%J@83N7C5v2q z24DC31&2@NVlVBpEGw3pW2LN*zp%!LnGCq}Lg{G&un0Al$8+0Ui1v6%@{S6n(Q>Pj zYUKW4#lQi79C`F(xO@9bTxDrEYEU!hehSDkw`vfUFS;W440jY(D5d^5^zS%ST=JRX#B zOf4%&S*=gq>@9Q+jbvQQ5188doSNF?fOW~Jx!tqe%>O7NX47f5H-FD}ED5J#UV2p_ z+81`*C*o-DXOh0zz>Se)@Ne(4@oRnDx^AVq;1KgDJy4R(MCy7kiWTXVN1%Y)e#(MC zASp~BLuKU+;uXP8nFnF1`N?A?&ff2^qPlwC?EvuZotxX@m%k$~aQiGwOxsjK_#8d= zScC#^faUlmOl*0RnR|+lE5(XUF1^9<$kqG5H;!zHe9<8=2eMn%et0o7x9D=~?*xQ`JLo zAt$qVS)i0x%XiCBV|Rx|Y&KQ#;|(TGSYF?!pEmqjHiqmPMR z0wRk@_)_2`C~cTZ$Ijw(i~x)8J6^9jRXH!cOWL;m5>r=8r|7Z*)MJlZTZV>)XnA$gGczS$zI^!khfQ2^@&OWB z)7N(`|b=z0xUN zuQToOVnCo}i_>(c-!5$JgnVVy)%&#>(43u>Y3}$zVk5#TuLpc}advhV5kbcBZ{3mY zl{Mj2r%&i;?JcO$x_AFRet#jWpkS%SL}chK7z`${Hg)wl|Bg{uf!spH!scY&RKCpG zcjE_!9~;xq z(1=xQK=5*N?=NU% z{`&0MvwoY#k)}}0q*My4++3KhQClk}_d)dSydL0tD=RBf@8I3LFV)q4exys)&0e@N z*TAcnnqP>B9EQ5@H{3*DE_n6{3kh{^=DK>c|GC{`)fbH2si@%LKsGy0E%$^F@Q2|W z877%oSq;{GR)pWu2+~yY3*|fAaTPoO00or6o#Y|MDdNR$!`j-~B#|hqKC|n4pI#_i zA*6N512LnQxp8`Wir<`ch2Dg9{N2zdC1WOxA%)2F^mKW7IjQ9E>K3MN%mHG|Ei6d1 z;aV|<3VX2BwS*jRx+I0x`sSut-Q4>6`W^Pr7reZ~S2M%x;oX79t0c$#{P{CS+!04| z;qmGZ5E|z0;v$x#WjmbQLpbQdUigFUNUMR5XNd&J7Vz`)&sJ#f!fQ>2>Em?=OJ zARO%OUN>qNyj2{dlEPLejIL{24&JS6i{0u#7mmYV#7oRnT54)EB@55EkG{S>syB>O zcH;PWc^&7Q?6FvEDi^DK;0tkaL-W%9cW>J~EJ@4p@;Z{qaAkcRp=p``aD#OWW+Qo! zjJ63N5Te#HFFoB(G!H5lxr@CxIy(CD$ou#E^*Z6w=6luNFCCYeIc({wp4k?W!+>tFEAhd(My*CU6ChY41 zu1@Q_4tAzXRqgHVEi9hUV0RIR*4Gy%@7}Gny8oLDh*H%Q!TR=+{nRf1ecAWlZ^F(A zhkc|=o+>BM-@17-&>V5RHf$ZVks){34I26MEF&Z1?p??5%cD$lkB;LZmN-5ho@jaS zz1NUg(&_oKegcAmnvmIy%*>1PbJED$x;c_CeQw$5)J)Q-kMvDVb95kb5FaI$*K%R> zQ{eo(rDet^Pxd^;wk=SBBvww8E$AB_Nv^IYnXi7f&YgaK`Mrm>_T+r^7Pd*qT!?-s z8}6b_%IW0f`i2I)e}sjhVYBb{48LK;qW^-s(l1hQa;hdz7&K_zO=kzUt zJSQioE|Zpq=5ucD4)|XS{k#2@Weq;xf!BaQpwiM(-2zz&o58=*M$7goOQ*M%pQ)5K z_V&IK657ijTUfFr%Sxx8-n>vqo}=}K@#^Hi1p>qNe(U#GHDHl+%8gQ_Jtm$hD{})I zn-JIc+El6wo~gN$n@FS?#|{$e>gDD2`t`TZoT_i$ydj|*)cUlts)}Dkr0uQHzHv`w zrCR33-;uYSbt!Kv_JOZj-R4)lq~qh`^K~Eu?zSWrDezJMom;nVnT4y$CGSSeQ8$^@ zvDONTi#L0sdZ}NXt&Du;^z7KkBqdouw^kDUJZZTkfM^n8R|q!RohSbmG|hq3Qt69U z>H4v_%r6OJ58l#k=pzo1VoE5JOg+_3xfeT!qGW&74fl;NY1y$CRgvuK*}vjnTV1WL zsUf{KH8r)g?=5xVd&3AV_X7g3BM_4tmhE6%t9|fiXKV zXTZ3zxw)Xa!2B!lyUtf?Y9I2u4@Zr0c%+TOR`pU|;(DI}oOhMv~QdP>{c$`&!X=bgZgA2v*4b|V$qc~orj zj0_AAWm0jz?2o)d3TbY20byZQNw>E(6f+SK5$+4EkLl>RxVcFIb+8nGl3-4%s;Uw+ zsTUFwx*P@&`x)=wzt5r&eA*p^F#_(xYqCfwN-{%A3UA3d2A%Rm#vqj|Z?ZyIkL4F4 zv#P+|NsxN`9FRq(atEj39#+QVpJ(HBgjR`jVl8r{2QIS*vR#>D? zI`pzdXU4ufVEc?LNqr_?21La!yPm!=ew(`RrE_YV6UpMkOLw}shPXqngS+7_3V}x} zRfdq3UHOk6Kcd=y|3jz?oMyMn#_wQ>&ex5pCjwRHUr+O|)n&H>`*T)Lc8V!N*6yg2uW-1cBa93^ z-7Q*)UHxGpb}kUQP~tZI5Tor3tVcDuP@a`bVrBS(Y-JV0?5!<$LI!Z5Ah^4T9Ua5ap3GB$OP2N&m@fA_)*Hi~h` zNNn8Hv-OVwA$m(gs5UoFcb5fAcYjpAB6}S|YG5VRk<>WsYFLMk`-iIkZZ6$pHs*&b zo+p^K!F~T2XmMj@_lXm6d$lQ^jmZ*p;VZ>N$xysQMz;L56PXKxaBy(M2o>@1z0!Yc zpl|8w?$jbB!^oL7E%MVQ`2qEIE@NK)!%_qkWOajVg+ngJiGu9x`bL2e*~5n=lw>#m zAsv%%OS!)#Xd=kTR^)A2QLHRvE7zP)KHd1g%1?=f?61G3ZPUj&~aItm|{+WnATZPy*yg z@VGAtdK^u0h>{ZOA7Q)?W0nJfl+gv=9&(qX1DpmFjJ6jey=#u{d>K8uwVBV`-wfZL zRHze1;I5YR6Mrmr{ZLU-N>;ocv&%$*fomb!fdl<1Y|NkO2N`Y2)d#MdsC&f#)R-re zqhIpR?R?vx|A9f_Y>JG%-F3E`eL+?g)48e%+PMEX*Ub|Wv=HA60=j2Q%3tlIxK=v( zx8^kdTJT_5JvLgvEc?F;30atpa?Q`;ImqBV>{Ez~4*g`}Z~RAUHZ?9XF?KAz| z`x%`t90jm|IviuxR!2O4@5$dm=VOp?Tdj25Iyj_e_#|g)DC(0nD#YqKbSYQ)xXjQ!Gs+|u3bc%lB z+nnM^~fmQxkMp~NtV_>g?6F#LBH+@~c( z5q6Mox8PzvFWQclG8bepSGdqh%!8#01{=6&sa7Z`CrkTki zpi>|6^aBS^c#gG^k;Qw%(8Vce&G4Dwj^EYVg;wY)Gyp(o9h~ov=Gzb?-IhRXL;x&1 z{O9*Z`IRxE@M^^f#-F6m{7C#hO!>gu50$pAC@mIgmi^5en5fx0^a{P40I)U(YV7 zNp;(IdG_PhC>qmGx9U|$)0>*O$9jH})}tL}H5%aKakZKJLL=NIJgq^Z@$gDjU^>DC zqmXB$3Y;<1?L#EHivOx3ggw;XyF!^m`Kjd#bY_4Z8LWr#&Fiz6=pCn(Jl=wQ(DKB0`FDf2-d3q-FQ zO!dU}x6buzA8Ek#dMmipumx%p8FSbH$v(Xm&W>q$<__ZpbJNCwuphfp+7F8V>D&A2 ztm$^#GF!3L(WYS8J`_~7a~jby3;>xFKto~f`jaA+a5==2@Pr|b2TzP zkSugw{KhYzh#Rhs{e$2loWG@o2IHec$DT-u_1i`?Vg!CrO~y?-yioGJ%c)qTuOOtP zR7R~y#S1r^t-N?kZn=oXTfYA->SbrVzHEs@ z4r`R5p_T@tgej{4O%*&OoUhCSVISjKr+$yc*S#}D!`64|15@fe0WjLpbd95u&vgd>vONJy zBnf=ZN>kEM3{ud4ZS;lUXZhNQOd``n!uy_E_>s)lscfqm#Tx2gN%e07xroulmcd+` zXFYv^j+1J;o$_lDIZKmebOa;XA7;j?baX6x9h0oaqbac?j~x6r0Jcg)ufwMxgEHPE z=%bT3>2=jwL)YwA?{b@+G@fW5Z|L52^hU>U@Pw!*X3~Tz|V$07{o3`_b;zdK>A>YDOkj4SKbb2{yuQsg35bMTj()&XIim zDx5A@zQz5p@SC6m4-3V>5cV^q;nKM%IMz{N8t@MdrjADzl$|qT_8uq?D?HQVp4+|) zC?YM(8yki&8v?iBPO&>5DV`zv-~71CD+x2R5yq$^m-JJfadD#e zdbFk4QEe(zR`Q>ZBG*Uv0_+jq2p zKy;4DRz{L4k_JUoVla54)e^Pw3Z(cE01aUNTiDvC;ByIYciVZ)B#N~rAlUj{LTAh3 zw`5!y=VAFPCCiHL>&bdn76y5+dzN0wr?|Wpsc*f9^HxgJeOFWQ>;c51ADFgNwHLIr zuup7(6)ZHAV7%|HxbnYY;+#wGceJ=}ELS(ZYkUS~?nhMoZna^k_qHk_W;v}{Kv}Q$ zKD&y4jEj9x%&&NTgw#deW%isN>OgvJmB!TXxbSe?gE3-%&#ajRVNdkI=|@NY<_q!C zy1mOOv0~SLmFI3IR|wiSvA!l?vmGkxBA4$S20i;p0ISS*92{awj@QoGQL8-~=wHFz z#$S>yJRvGHQH#CxbEQ9BS*1M%M#7u|yFbJx#+hiFx1UVcgZCxoqpzBWE6!;2k75IK zWaUUV6S$X75~3^px~w{62Hq%LWaslAUVioQF)9;8N(az^&)ZO3d9i%$!*wE_W_Z1i z$73Qc(pkFUfnk6B(6(BVME{F}<1dAGe)^=D@4xgk_okZO1R1(nHr}6?7E$lZEPC5| zm^HDBV)>rO%;sWTx6hL9L1x5RppROd%{^xlYX;YT82o?F`hQbA|FzeD?e)J9 k#{UhI|9@ff<(i@?@)IVfJ#3BiFB>v-WgVsZH}5|FA0(o{NB{r; literal 0 HcmV?d00001 diff --git a/3images/30202.png b/3images/30202.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0d960cbe8d6b0a719d65f2b1133535a531abe9 GIT binary patch literal 120747 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 literal 0 HcmV?d00001 diff --git a/index.md b/index.md index d5db7d0..2ff0b0d 100644 --- a/index.md +++ b/index.md @@ -106,6 +106,7 @@ ##第捌章 用Tornado做网站 1. [为做网站而准备](./301.md)==>开发框架,python的常用web框架,tornado框架介绍和安装 +2. [分析Hell](./302.md)==>发布tornado做的网站,并剖析基本结构 ##第五部分:科学计算 From 1a52639d3d9bd0d522e57a0c4aa12c32f9074c78 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 13 May 2015 21:18:53 +0800 Subject: [PATCH 018/376] hello --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 2ff0b0d..28cb39d 100644 --- a/index.md +++ b/index.md @@ -106,7 +106,7 @@ ##第捌章 用Tornado做网站 1. [为做网站而准备](./301.md)==>开发框架,python的常用web框架,tornado框架介绍和安装 -2. [分析Hell](./302.md)==>发布tornado做的网站,并剖析基本结构 +2. [分析Hello](./302.md)==>发布tornado做的网站,并剖析基本结构 ##第五部分:科学计算 From 5ec99a334cf79cd2d59835d59b61f01e22ea64b6 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Thu, 14 May 2015 17:59:53 +0800 Subject: [PATCH 019/376] constructure --- 303.md | 180 ++++++++++++++++++++++++++++++++++++++ 3code/web/application.py | 17 ++++ 3code/web/application.pyc | Bin 0 -> 493 bytes 3code/web/server.py | 25 ++++++ 3code/web/url.py | 14 +++ 3code/web/url.pyc | Bin 0 -> 340 bytes 3images/30301.png | Bin 0 -> 13011 bytes index.md | 1 + 8 files changed, 237 insertions(+) create mode 100644 303.md create mode 100644 3code/web/application.py create mode 100644 3code/web/application.pyc create mode 100644 3code/web/server.py create mode 100644 3code/web/url.py create mode 100644 3code/web/url.pyc create mode 100644 3images/30301.png diff --git a/303.md b/303.md new file mode 100644 index 0000000..11ff95c --- /dev/null +++ b/303.md @@ -0,0 +1,180 @@ +>你要提醒众人,叫他们顺服作官的、掌权的,遵他的命,预备行各样的善事。不要毁谤,不要争竞,总要和平,向众人大显温柔。我们从前也是无知,悖逆,受迷惑,服侍各样私欲和宴乐,常存恶毒、嫉妒的心,是可恨的,又是彼此相恨。但到了神我们救主的恩慈和他向人所施的慈爱显明的时候,他便救了我们,并不是我们自己所行的义,乃是照着他的怜悯,藉着重生的洗和圣灵的更新。(TITUS 3:1-5) + +#用tornado做网站(1) + +从现在开始,做一个网站,当然,这个网站只能算是一个毛坯的,可能很简陋,但是网站的主要元素,它都会涉及到,读者通过此学习,能够了解网站的开发基本结构和内容,并且对前面的知识可以有综合应用。 + +##基本结构 + +下面是一个网站的基本结构 + +![](./3images/30301.png) + +**前端** + +这是一个不很严格的说法,但是在日常开发中,都这么说。在网站中,所谓前端就是指用浏览器打开之后看到的那部分,它是呈现网站传过来的信息的界面,也是用户和网站之间进行信息交互的界面。撰写前端,一般使用HTML/CSS/JS,当然,非要用python也不是不可以(例如上节中的例子,就没有用HTML/CSS/JS),但这势必造成以后维护困难。 + +MVC模式是一个非常好的软件架构模式,在网站开发中,也常常要求遵守这个模式。请阅读维基百科的解释: + +>MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 + +>MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组: + +> - (控制器 Controller)- 负责转发请求,对请求进行处理。 +> - (视图 View) - 界面设计人员进行图形界面设计。 +> -(模型 Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。 + +所谓“前端”,就对大概对应着View部分,之所以说是大概,因为MVC是站在一个软件系统的角度进行划分的,上图中的前后端,与其说是系统部分的划分,不如严格说是系统功能的划分。 + +前端所实现的功能主要有: + +- 呈现内容。这些内容是根据url,由后端从数据库中提取出来的。前端将其按照一定的样式呈现出来。另外,有一些内容,不是后端数据库提供的,是写在前端的。 +- 用户与网站交互。现在的网站,这是必须的,比如用户登录。当用户在指定的输入框中输入信息之后,该信息就是被前端提交给后端,后端对这个信息进行处理之后,在一般情况下都要再反馈给前端一个处理结果,然后前端呈现给用户。 + + +**后端** + +这里所说的后端,对应着MVC中的Controller和Model的部分或者全部功能,因为在我们的图中,“后端”是一个狭隘的概念,没有把数据库放在其内。 + +不在这些术语上纠结。 + +在我们这里,后端就是用python写的程序。主要任务就是根据需要处理由前端发过来的各种请求,根据请求的处理结果,一方面操作数据库(对数据库进行增删改查),另外一方面把请求的处理结果反馈给前端。 + +**数据库** + +工作比较单一,就是面对后端的python程序,任其增删改查。 + +关于python如何操作数据库,在本教程的第贰季第柒章中已经有详细的叙述,请读者阅览。 + +##一个基本框架 + +上节中,显示了一个只能显示一行字的网站,那个网站由于功能太单一,把所有的东西都写到一个文件中。在真正的工程开发中,如果那么做,虽然不是不可,但开发过程和后期维护会遇到麻烦,特别是不便于多人合作。 + +所以,要做一个基本框架。以后网站就在这个框架中开发。 + +建立一个目录,在这个目录中建立一些子目录和文件。 + + /. + | + handlers + | + methods + | + statics + | + templates + | + application.py + | + server.py + | + url.py + +这个结构建立好,就摆开了一个做网站的架势。有了这个架势,后面的事情就是在这个基础上添加具体内容了。当然,还可以用另外一个更好听的名字,称之为设计。 + +依次说明上面的架势中每个目录和文件的作用(当然,这个作用是我规定的,读者如果愿意,也可以根据自己的意愿来任意设计): + +- handlers:我准备在这个文件夹中放前面所说的后端python程序,主要处理来自前端的请求,并且操作数据库。 +- methods:这里准备放一些函数或者类,比如用的最多的读写数据库的函数,这些函数被handlers里面的程序使用。 +- statics:这里准备放一些静态文件,比如图片,css和javascript文件等。 +- templates:这里放模板文件,都是以html为扩展名的,它们将直接面对用户。 + +另外,还有三个python文件,依次写下如下内容。这些内容的功能,已经在上节中讲过,只是这里进行分门别类。 + +**url.py**文件 + + #!/usr/bin/env python + # coding=utf-8 + """ + the url structure of website + """ + + import sys #utf-8,兼容汉字 + reload(sys) + sys.setdefaultencoding("utf-8") + + from handlers.index import IndexHandler #假设已经有了 + + url = [ + (r'/', IndexHandler), + ] + +url.py文件主要是设置网站的目录结构。`from handlers.index import IndexHandler`,虽然在handlers文件夹还没有什么东西,为了演示如何建立网站的目录结构,假设在handlers文件夹里面已经有了一个文件index.py,它里面还有一个类IndexHandler。在url.py文件中,将其引用过来。 + +变量url指向一个列表,在列表中列出所有目录和对应的处理类。比如`(r'/', IndexHandler),`,就是约定网站根目录的处理类是IndexHandler,即来自这个目录的get()或者post()请求,均有IndexHandler类中相应方法来处理。 + +如果还有别的目录,如法炮制。 + +**application.py**文件 + + #!/usr/bin/env python + # coding=utf-8 + + from url import url + + import tornado.web + import os + + settings = dict( + template_path = os.path.join(os.path.dirname(__file__), "templates"), + static_path = os.path.join(os.path.dirname(__file__), "statics") + ) + + application = tornado.web.Application( + handlers = url, + **settings + ) + +从内容中可以看出,这个文件完成了对网站系统的基本配置,建立网站的请求处理集合。 + +`from url import url`是将url.py中设定的目录引用过来。 + +setting引用了一个字典对象,里面约定了模板和静态文件的路径,即声明已经建立的文件夹"templates"和"statics"分别为模板目录和静态文件目录。 + +接下来的application就是一个请求处理集合对象。请注意`tornado.web.Application()`的参数设置: + +>tornado.web.Application(handlers=None, default_host='', transforms=None, **settings) + +关于settings的设置,不仅仅是文件中的两个,还有其它,比如,如果填上`debug = True`就表示出于调试模式。调试模式的好处就在于有利于开发调试,但是,在正式部署的时候,最好不要用调试模式。其它更多的settings可以参看官方文档:[tornado.web-RequestHandler and Application classes](http://tornado.readthedocs.org/en/latest/web.html) + +**server.py**文件 + +这个文件的作用是将tornado服务器运行起来,并且囊括前面两个文件中的对象属性设置。 + + #!/usr/bin/env python + # coding=utf-8 + + import tornado.ioloop + import tornado.options + import tornado.httpserver + + from application import application + + from tornado.options import define, options + + define("port", default = 8000, help = "run on the given port", type = int) + + def main(): + tornado.options.parse_command_line() + http_server = tornado.httpserver.HTTPServer(application) + http_server.listen(options.port) + + print "Development server is running at http://127.0.0.1:%s" % options.port + print "Quit the server with Control-C" + + tornado.ioloop.IOLoop.instance().start() + + if __name__ == "__main__": + main() + +此文件中的内容,在[上节](./302.md)已经介绍,不再赘述。 + +如此这般,就完成了网站架势的搭建。 + +后面要做的是向里面添加内容。 + +------ + +[总目录](./index.md)   |   [上节:分析Hello](./302.md)   |   [下节:用tornado做网站(2)](./304.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/3code/web/application.py b/3code/web/application.py new file mode 100644 index 0000000..55496ee --- /dev/null +++ b/3code/web/application.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# coding=utf-8 + +from url import url + +import tornado.web +import os + +setting = dict( + template_path = os.path.join(os.path.dirname(__file__), "templates"), + static_path = os.path.join(os.path.dirname(__file__), "statics") + ) + +application = tornado.web.Application( + handlers = url, + **setting + ) diff --git a/3code/web/application.pyc b/3code/web/application.pyc new file mode 100644 index 0000000000000000000000000000000000000000..835c044e2b56052eefff4b72438d7eef5f5f7775 GIT binary patch literal 493 zcmZWk%TB{E5FFd-JC({OAaTg4`~X7m0~~lBm)|sM+1#gIK`yTCw(ZSt)-#c5e!>*0IJn@Xn mI0e6Ay1qUWtozTn&H literal 0 HcmV?d00001 diff --git a/3code/web/server.py b/3code/web/server.py new file mode 100644 index 0000000..9b35bbc --- /dev/null +++ b/3code/web/server.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# coding=utf-8 + +import tornado.ioloop +import tornado.options +import tornado.httpserver + +from application import application + +from tornado.options import define, options + +define("port", default = 8000, help = "run on the given port", type = int) + +def main(): + tornado.options.parse_command_line() + http_server = tornado.httpserver.HTTPServer(application) + http_server.listen(options.port) + + print "Development server is running at http://127.0.0.1:%s" % options.port + print "Quit the server with Control-C" + + tornado.ioloop.IOLoop.instance().start() + +if __name__ == "__main__": + main() diff --git a/3code/web/url.py b/3code/web/url.py new file mode 100644 index 0000000..c0ec0c1 --- /dev/null +++ b/3code/web/url.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# coding=utf-8 +""" +the url structure of website +""" +import sys +reload(sys) +sys.setdefaultencoding("utf-8") + +from handler.index import IndexHandler + +url = [ + (r'/', IndexHandler), +] diff --git a/3code/web/url.pyc b/3code/web/url.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a41295d244c4e62a77ae474ab858a42ece41e46b GIT binary patch literal 340 zcmYLDO-sZ;3{Bc?m9ho#2S|^-*u8oX@u;94{5aT4sZF|DnQf($LHF!W_6KOP3I^sS z?Ni4*D8=UaiO*D*a$yMI`npJ~2 q->U$71HG*@@(=z{X|>Wu^|liu=i7;b;|sgfX9_7UF~dAMihlsInMO+h literal 0 HcmV?d00001 diff --git a/3images/30301.png b/3images/30301.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec59c406ddcb8b433801aee2a8d1cc62b45299c GIT binary patch literal 13011 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开发框架,python的常用web框架,tornado框架介绍和安装 2. [分析Hello](./302.md)==>发布tornado做的网站,并剖析基本结构 +3. [用tornado做网站(1)](./303.md)==>网站的基本结构,一个基于tornado框架的网站架子 ##第五部分:科学计算 From fbe8521dabd88015e6b45e485290b3c32d00832f Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 19 May 2015 16:48:19 +0800 Subject: [PATCH 020/376] add __init__.py --- 219.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/219.md b/219.md index 485f823..fd579fe 100644 --- a/219.md +++ b/219.md @@ -186,6 +186,10 @@ python不是一个封闭的体系,是一个开放系统。开放系统的最 如此,就完成了告知过程。 +##`__init__.py`方法 + +`__init__.py`是一个空文件,将它放在某个目录中,就可以将该目录中的其它.py文件作为模块被引用。这个具体应用参见[用tornado做网站(2)](./304.md) + ------ [总目录](./index.md)   |   [上节:错误和异常(3)](./218.md)   |   [下节:标准库(1)](./220.md) From 3064b03b1ffa92f9da437c88687356f2004d3f83 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 19 May 2015 16:50:26 +0800 Subject: [PATCH 021/376] tornado 2 --- 304.md | 191 +++++++++++++++++++++++++++++ 3code/web/handlers/__init__.py | 0 3code/web/handlers/__init__.pyc | Bin 0 -> 162 bytes 3code/web/handlers/index.py | 8 ++ 3code/web/handlers/index.pyc | Bin 0 -> 669 bytes 3code/web/methods/db.py | 8 ++ 3code/web/statics/js/jquery.min.js | 5 + 3code/web/statics/js/script.js | 9 ++ 3code/web/templates/index.html | 16 +++ 3code/web/url.py | 2 +- 3images/30401.png | Bin 0 -> 8111 bytes 3images/30402.png | Bin 0 -> 7224 bytes 3images/30403.png | Bin 0 -> 114615 bytes 3images/30404.png | Bin 0 -> 40367 bytes 3images/30405.png | Bin 0 -> 114872 bytes index.md | 1 + 16 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 304.md create mode 100644 3code/web/handlers/__init__.py create mode 100644 3code/web/handlers/__init__.pyc create mode 100644 3code/web/handlers/index.py create mode 100644 3code/web/handlers/index.pyc create mode 100644 3code/web/methods/db.py create mode 100644 3code/web/statics/js/jquery.min.js create mode 100644 3code/web/statics/js/script.js create mode 100644 3code/web/templates/index.html create mode 100644 3images/30401.png create mode 100644 3images/30402.png create mode 100644 3images/30403.png create mode 100644 3images/30404.png create mode 100644 3images/30405.png diff --git a/304.md b/304.md new file mode 100644 index 0000000..b6ee9d2 --- /dev/null +++ b/304.md @@ -0,0 +1,191 @@ +>你们不要被那诸般怪异的教训勾引了去。因为人心靠恩得坚固才是好的,并不是靠饮食;那在饮食上专心的,从来没有得着益处。(HEBREWS 13:9) + +#用tornado做网站(2) + +既然摆好了一个网站的架势,下面就可以向里面填内容。 + +##连接数据库 + +要做的网站,有数据库支持,虽然这不是必须的,但是如果做一个功能强悍的网站,数据库就是必须的了。 + +接下来的网站,我暂且采用mysql数据库。 + +怎么连接mysql数据呢?其方法跟[《mysql数据库(1)](./230.md)中的方法完全一致。为了简单,我也不新建数据库了,就利用已经有的那个数据库。 + +在上一节中已经建立的文件夹methods中建立一个文件db.py,并且参考[《mysql数据库(1)](./230.md)和[《mysql数据库(2)](./231.md)的内容,分别建立起连接对象和游标对象。代码如下: + + #!/usr/bin/env python + # coding=utf-8 + + import MySQLdb + + conn = MySQLdb.connect(host="localhost", user="root", passwd="123123", db="qiwsirtest", port=3306, charset="utf8") #连接对象 + + cur = conn.cursor() #游标对象 + +##用户登录 + +###前端 + +很多网站上都看到用户登录功能,这里做一个简单的登录,其功能描述为: + +>当用户输入网址,呈现在眼前的是一个登录界面。在用户名和密码两个输入框中分别输入了正确的用户名和密码之后,点击确定按钮,登录网站,显示对该用户的欢迎信息。 + +用图示来说明,首先呈现下图: + +![](./3images/30401.md) + +用户点击“登录”按钮,经过验证是合法用户之后,就呈现这样的界面: + +![](./3images/30401.md) + +先用HTML写好第一个界面。进入到templates文件,建立名为index.html的文件: + + + + + + Learning Python + + +

Login

+
+

UserName:

+

Password:

+

+
+ + +这是一个很简单前端界面。要特别关注``,其目的在将网页的默认宽度(viewport)设置为设备的屏幕宽度(width=device-width),并且原始缩放比例为1.0(initial-scale=1),即网页初始大小占屏幕面积的100%。这样做的目的,是让在电脑、手机等不同大小的屏幕上,都能非常好地显示。 + +这种样式的网页,就是“自适应页面”。当然,自适应页面绝非是仅仅有这样一行代码就完全解决的。要设计自适应页面,也就是要进行“响应式设计”,还需要对CSS、JS乃至于其它元素如表格、图片等进行设计,或者使用一些响应式设计的框架。这个目前暂不讨论,读者可以网上搜索有关资料阅读。 + +>一提到要能够在手机上,读者是否想到了HTML5呢,这个被一些人热捧、被另一些人蔑视的家伙,毋庸置疑,现在已经得到了越来越广泛的应用。 + +>HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到符合当代的网络需求。广义论及HTML5时,实际指的是包括HTML、CSS和JavaScript在内的一套技术组合。 + +>响应式网页设计(英语:Responsive web design,通常缩写为RWD),又称为自适应网页设计、回应式网页设计。 是一种网页设计的技术做法,该设计可使网站在多种浏览设备(从桌面电脑显示器到移动电话或其他移动产品设备)上阅读和导航,同时减少缩放、平移和滚动。 + +如果要看效果,可以直接用浏览器打开网页,因为它是.html格式的文件。 + +###引入jQuery + +虽然完成了视觉上的设计,但是,如果点击那个login按钮,没有任何反应。因为它还仅仅是一个孤立的页面,这时候需要一个前端交互利器——javascript。 + +>对于javascript,不少人对它有误解,总认为它是从java演化出来的。的确,两个有相像的地方。但javascript和java的关系,就如同“雷峰塔”和“雷锋”的关系一样。详细读一读来自维基百科的诠释。 + +>JavaScript,一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。然而现在JavaScript也可被用于网络服务器,如Node.js。 + +>在1995年时,由网景公司的布兰登·艾克,在网景导航者浏览器上首次设计实现而成。因为网景公司与昇阳公司合作,网景公司管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语义与Self及Scheme较为接近。 + +>为了获取技术优势,微软推出了JScript,与JavaScript同样可在浏览器上运行。为了统一规格,1997年,在ECMA(欧洲计算机制造商协会)的协调下,由网景、昇阳、微软和Borland公司组成的工作组确定统一标准:ECMA-262。因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。 + +但是,我更喜欢用jQuery,因为它的确让我省了不少事。 + +>jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作。由约翰·雷西格(John Resig)在2006年1月的BarCamp NYC上发布第一个版本。目前是由Dave Methvin领导的开发团队进行开发。全球前10,000个访问最高的网站中,有65%使用了jQuery,是目前最受欢迎的JavaScript库。 + +在index.html文件中引入jQuery的方法有多种。 + +原则上将,可以在HTML文件的任何地方引入jQuery库,但是通常放置的地方在html文件的开头`...`中,或者在文件的末尾``以内。放在开头,如果所用的库比较大、比较多,在载入页面时时间相对长点。 + +第一种引入方法,是国际化的一种: + + + +这是直接从jQuery CDN(Content Delivery Network)上直接引用,好处在于如果这个库更新,你不用任何操作,就直接使用最新的了。但是,如果在你的网页中这么用了,如果在某个有很多自信的国家上网,并且没有梯子,会发现网页几乎打不开,就是因为连接上面那个地址的通道是被墙了。 + +当然,jQuery CDN不止一个,比如官方网站的: + + + +第二种引入方法,就是将jQuery下载下来,放在指定地方(比如,与自己网站在同一个存储器中,或者自己可以访问的另外服务器)。到官方网站([https://jqueryui.com/](https://jqueryui.com/))下载最新的库,然后将它放在已经建立的statics目录内,为了更清楚区分,可以在里面建立一个子目录js,jquery库放在js子目录里面。下载的时候,建议下载以min.js结尾的文件,因为这个是经过压缩之后,体积小。 + +我在`statics/js`目录中放置了下载的库,并且为了简短,更名为jquery.min.js。 + +本来可以用下面的方法引入: + + + +如果这样写,也是可以的。但是,考虑到tornado的特点,用下面方法引入,更具有灵活性: + + + +不仅要引入jquery,还需要引入自己写的js指令,所以要建立一个文件,我命名为script.js,也同时引用过来。虽然目前这个文件还是空的。 + + + +这里用的static_url是一个函数,它是tornado模板提供的一个函数。用这个函数,能够制定静态文件。之所以用它,而不是用上面的那种直接调用的方法,主要原因是如果某一天,将静态文件目录statics修改了,也就是不指定statics为静态文件目录了,定义别的目录为静态文件目录。只需要在定义静态文件目录那里修改(定义静态文件目录的方法请参看上一节),而其它地方的代码不需要修改。 + +###编写js + +先写一个测试性质的东西。 + +用编辑器打开statics/js/script.js文件,如果没有就新建。输入的代码如下: + + $(document).ready(function(){ + alert("good"); + $("#login").click(function(){ + var user = $("#username").val(); + var pwd = $("#password").val(); + alert("username: "+user); + }); + }); + +由于本教程不是专门讲授javascript或者jquery,所以,在js代码部分,只能一带而过,不详细解释。 + +上面的代码主要实现获取表单中id值分别为username和password所输入的值,alert函数的功能是把值以弹出菜单的方式显示出来。 + +##hanlers里面的程序 + +是否还记得在上一节中,在url.py文件中,做了这样的设置: + + from handlers.index import IndexHandler #假设已经有了 + + url = [ + (r'/', IndexHandler), + ] + +现在就去把假设有了的那个文件建立起来,即在handlers里面建立index.py文件,并写入如下代码: + + #!/usr/bin/env python + # coding=utf-8 + + import tornado.web + + class IndexHandler(tornado.web.RequestHandler): + def get(self): + self.render("index.html") + +当访问根目录的时候(不论输入localhost:8000,还是http://127.0.0.1:8000,或者网站域名),就将相应的请求交给了handlers目录中的index.py文件中的IndexHandler类的get()方法来处理,它的处理结果是呈现index.html模板内容。 + +`render()`函数的功能在于向请求者反馈网页模板,并且可以向模板中传递数值。关于传递数值的内容,在后面介绍。 + +上面的文件保存之后,回到handlers目录中。因为这里面的文件要在别处被当做模块引用,所以,需要在这里建立一个空文件,命名为`__init__.py`。这个文件非常重要。在[编写模块](./219.md)一节中,介绍了引用模块的方法。但是,那些方法有一个弊端,就是如果某个目录中有多个文件,就显得麻烦了。其实python已经想到这点了,于是就提供了`__init__.py`文件,只要在该目录中加入了这个文件,该目录中的其它.py文件就可以作为模块被python引入了。 + +至此,一个带有表单的tornado网站就建立起来了。读者可以回到上一级目录中,找到server.py文件,运行它: + + $ python server.py + Development server is running at http://127.0.0.1:8000 + Quit the server with Control-C + +如果读者在前面的学习中,跟我的操作完全一致,就会在shell中看到上面的结果。 + +打开浏览器,输入`http://localhost:8000`或者`http://127.0.0.1:8000`,看到的应该是: + +![](./3images/30403.png) + +这就是script.js中的开始起作用了,第一句是要弹出一个对话框。点击“确定”按钮之后,就是: + +![](./3images/30404.png) + +在这个页面输入用户名和密码,然后点击Login按钮,就是: + +![](./3images/30405.png) + +一个网站有了雏形。不过,当提交表单的反应,还仅仅停留在客户端,还没有向后端传递客户端的数据信息。请继续学习下一节。 + +------ + +[总目录](./index.md)   |   [上节:用tornado做网站(1)](./303.md)   |   [下节:用tornado做网站(3)](./305.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/3code/web/handlers/__init__.py b/3code/web/handlers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/3code/web/handlers/__init__.pyc b/3code/web/handlers/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..206447ed3df478898cc99f3a92e94e1bb2bcecfd GIT binary patch literal 162 zcmZSn%*&PhI4U%m0SXv_v;zS5S~qHm0AVgA_wgryoyNmP(g|$D40u#$+SsHcJ1z#TJToi)JO0EbY@fZ z1$4=L^PAakX2Z{;!P!UpP{8hlq_0TqDM3k}fCeBHPzHbk76B|mn2{U8JHQs;DeZAl z67}eZ`isug4avM!CB9B_RW@jTx(iB-N$d#$c71^xr2)iA#OZ>8B_O#b@wION3r}V% zKoG4Y;`G!G2y4D+RJpeC4P2jM1}SJdpNUy)W)W%dU?*hBO1CJNYk8xKRg215`8ZBw z;&S8A++l81t>*U|S7{~B3tggIzJl1X-r?7PHJT z(JX6qxoXIbx!{-2-;;`|Kkyp#i*Oa?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("