|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
. ?6 i! J( @% B# d7 y) b* t. C) e7 u/ t
书名:《Python 核心编程》(第三版). G0 Z; X9 W' ? t9 d% _
作者:卫斯理•春(Wesley Chun) ! R1 V6 }# @1 z, K! }
译者:孙波翔,李斌,李晗
" u1 X6 v. q) o! L4 E# n出版社:人民邮电出版社
$ {' g0 m& C. B$ l# e! d出版年:第1版 (2016年5月25日)0 G0 K2 o8 z3 a3 }1 I
定价:99.00- O5 q1 g. o" y/ G5 `! {
装帧:平装' g! d3 b$ H. X: a" K5 D$ \- Y8 e* I
ISBN:7115414777
; w; W/ Q8 o+ `/ g6 m- u( T1 U) n4 U5 i, K
1 y% [: Y3 y( m1 r
购买链接:
i$ v; U5 a( o2 a* G4 A4 r, ]" o6 }, j
亚马逊 -> 传送门
6 R9 S' P- y8 V) ]' K7 v3 [# B+ I4 u2 P; Q4 a# X
当当网 -> 传送门
! N% d7 s8 }/ |+ \% f# N, c! I5 ]2 F6 X# U1 r# }
京东 -> 传送门
* V* |+ U) `! T! `. L/ p8 }- t6 p- V) Y
天猫 -> 传送门
& g6 F- S! ^. W5 f' R! U! s
+ @9 a6 R) r2 t0 p6 X4 b# N
! A( K6 P8 p/ R: R1 F% Z$ F
6 ~# Y9 j; X7 P* z; S$ u+ g5 K内容简介:
% X( O) U$ {$ R0 ^" e4 b( s8 `7 j( W c, L" l* T
《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第 二版)》的全新升级版本,总共分为3部分。第 1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第 2部分讲解了与Web开发相关的主题,包括Web客户端和服务器、CGI和WSGI相关的Web编程、Django Web框架、云计算、高 级Web服务。第3部分则为一个补充/实验章节,包括文本处理以及一些其他内容。 《Python核心编程(第3版)》适合具有一定经验的Python开发人员阅读。. `& O' e' |9 l2 e w) R/ |8 ~
( P4 [! b& q3 x. j8 B; Z f- X& _" B( N' }% h8 c
目录:
+ t5 @% ?+ V7 y# r
( L V! W- q- W! ~8 A2 t7 F★ 第一部分 通用应用主题 v+ w$ S9 N5 R4 x- `% O
; }% \5 Y8 ~6 z# f/ ~( q6 n2 ?第1章 正则表达式 2
8 C) L5 _; r% J7 D
! t- m- v3 p) a( H) E% R1.1 简介/动机 3* ]& I: a+ a$ o- ^4 W6 x/ g, f
, V* _7 Z7 I, }2 |+ c: P
1.2 特殊符号和字符 5
, U3 ]. w4 o9 u, {3 O8 w7 m- h t/ N& k
1.2.1 使用择一匹配符号匹配多个正则表达式模式 6* L( x2 y* N1 H6 x _
0 K/ G6 A f3 W9 |: @3 g; Q
1.2.2 匹配任意单个字符 6
, Y* p* _, y! }" p7 K% B' y
4 o! z6 u4 ^7 }( \: t1.2.3 从字符串起始或者结尾或者单词边界匹配 7- X8 c9 V$ Q3 o
5 n7 T# K' y0 L1 L/ m' U6 C4 x9 `1.2.4 创建字符集 83 s, \0 m# H) M
+ J q; h# c. k! i0 }2 y: G1.2.5 限定范围和否定 8
6 q5 N1 Q, r8 R5 y
J0 ~+ |$ B3 C% b0 k1 y1.2.6 使用闭包操作符实现存在性和频数匹配 9
; G0 g7 d- G$ m' [& H" w
. k# B0 {7 C& B" _/ H, ~2 n1.2.7 表示字符集的特殊字符 100 z6 E4 v; S& ^9 J* F2 @
- a8 s; ]. c$ [4 d" c
1.2.8 使用圆括号指定分组 10
- C [# a- I- a
0 [! c# ^/ ?9 B1 q! g" d1.2.9 扩展表示法 11
5 W1 x6 F/ }' W
; _ G# S2 Q- A* q G% u1.3 正则表达式和Python语言 11
" F z4 C% J2 s# K1 r V& y' ]+ I3 z1 j' W5 V+ q* m+ U( z3 t
1.3.1 re模块:核心函数和方法 12
2 e7 m* A+ h% k
0 b7 }" A) i! \5 v4 u6 B8 J/ @3 J1.3.2 使用compile()函数编译正则表达式 13. F5 G$ g1 {5 M2 O7 {! m& ?6 i4 J
2 j1 l9 M3 |8 ?8 y7 p0 I" }
1.3.3 匹配对象以及group()和groups()方法 146 K7 s& e; i2 ~$ K
/ H/ ?* E' f, i( _9 q1.3.4 使用match()方法匹配字符串 14
! N4 \0 U+ \# {! g1 y- o: t; `% ~- e5 v$ Y/ x. B& _
1.3.5 使用search()在一个字符串中查找模式(搜索与匹配的对比) 15
0 T. P$ n5 F% L1 ]3 M) D( G
; [: d1 X9 `2 Z: y# u1.3.6 匹配多个字符串 167 O5 n* F4 t' ?8 b
6 |8 K! e" {1 M1 C; h1.3.7 匹配任何单个字符(.) 166 V/ w, L: d1 o# o$ v1 b
6 s5 f2 g: X0 Q% X/ i
1.3.8 创建字符集([ ]) 179 X$ }, R4 p- k! q# `
0 p% A" L! D% U2 v3 B1.3.9 重复、特殊字符以及分组 18$ f, |- G) p1 H9 W
& Y' @6 \/ h4 |% j5 S( }
1.3.10 匹配字符串的起始和结尾以及单词边界 20
0 w8 y4 n) {2 ]6 b. ?. v
" E9 q6 }$ d# y2 n5 i9 A1.3.11 使用findall()和finditer()查找每一次出现的位置 21
" ]/ e9 b V9 O p3 ^7 a9 u# d% E! P
1.3.12 使用sub()和subn()搜索与替换 22
/ V f- a. D& l5 H2 f8 X6 B
) Y% z8 d2 P" P2 ]9 ~" U1.3.13 在限定模式上使用split()分隔字符串 23
3 S( [) w) v) }" S' g$ a O% m* w) x i+ [. @
1.3.14 扩展符号 24
5 s& F: g9 l! \; P: j& ?( {# x
, y, K. A2 N5 C# d7 ?1.3.15 杂项 27) v# z V: m* j9 K3 x2 q, E. j
1 e% H$ S& D( z8 _/ v6 a
1.4 一些正则表达式示例 28
* b _' d* J) k, O) R
- X6 _/ T" q1 B/ E1.5 更长的正则表达式示例 33
+ z: P/ L6 S. g) u
' N& \2 o5 w3 m1.5.1 匹配字符串 35
: Z- ~( z2 N `: V( j& o* {0 D8 {
1.5.2 搜索与匹配……还有贪婪 37' w, r: Y4 L4 I2 S
7 f0 C: r' J) F3 }% |, y+ ]1.6 练习 39: Z: D$ [( E. \# C, j% Q
4 h1 ]6 j9 n, ?* D) ]8 F$ r
第2章 网络编程 42- L3 q7 u! Z/ Q( v
, U" W" l$ _3 \# J% I& p2.1 简介 43+ T" v- a2 x! r# r8 m5 X% q
% O9 Q& T+ w! G% v2 C2.2 客户端/服务器架构 43& L4 ^+ `7 E. I6 d% K5 Z
5 I J2 g1 c- e& w& ?1 F3 D- P% J2.2.1 硬件客户端/服务器架构 43# z! Z' F6 R% t# m9 j$ N- Z8 L
6 m! k- Y4 k4 L2 e, q" i
2.2.2 软件客户端/服务器架构 446 z# ]$ U7 e z
. n' D( B5 {7 a: N3 c! O
2.2.3 银行出纳员作为服务器吗 44" }6 ?% J! I8 E
" r% O) ?8 Q/ D. Z3 E1 w7 a: ?2.2.4 客户端/服务器网络编程 45, a9 Z( _3 M6 P3 W' a
+ ?' S1 ~# Y0 J, w. l
2.3 套接字:通信端点 462 N' x+ R. e7 J! B& ^4 h' C
5 ~3 T3 z- w6 K9 b2.3.1 套接字 46
' a: O9 I7 B5 g- ^+ o3 R6 K% y0 B" ^- p* T q( W
2.3.2 套接字地址:主机-端口对 479 B* J0 D# h- i/ G
) _9 H. c U+ _$ u1 j4 W! G2.3.3 面向连接的套接字与无连接的套接字 47
; e3 R* W1 X" D$ ~9 l) T% G+ F
2 A; [% i" g% _: b0 K2.4 Python中的网络编程 48
' P$ T5 J# J; C8 d7 E' q- M
5 q( I$ e8 U+ p3 V2.4.1 socket()模块函数 497 Z& x& B5 e d5 a
- r" c! l, ~, c! H5 m7 `: W. J- }0 r
2.4.2 套接字对象(内置)方法 49! k* n& K& U8 t' W/ v8 P% T
2 z; o y9 }" ^3 P6 q4 ?8 a1 ]3 C
2.4.3 创建TCP服务器 512 x; h2 s% I% `" ^7 f* e+ G
2 s3 ?* F" k( z# d2.4.4 创建TCP客户端 54
. Q" X6 Z3 l4 Y3 t1 d( S1 y' B% A' h0 r4 J# Q
2.4.5 执行TCP服务器和客户端 56
5 k& G5 [+ k% U/ }. P8 m8 h$ m% {6 x6 O* ^: M0 e6 A
2.4.6 创建UDP服务器 584 u- j3 f1 y [* ?, c( l3 y/ Q x
; x, T6 ?! \5 X- y2 [+ e; v
2.4.7 创建UDP客户端 597 s9 t% j3 t5 M9 B7 h# }
C, E$ Y' c" A& C
2.4.8 执行UDP服务器和客户端 60
9 ^ S8 h% m t* s. J
4 _ ~- o6 l; e8 W2 u, k7 v- X* X2.4.9 socket模块属性 61
* {7 w8 l. ^$ w$ @1 l8 Z
8 R5 d- [. B0 t4 o( `2 x2.5 *SocketServer模块 62. ^/ e" W: ]8 m6 N, U# u/ K
0 @0 g- M/ s) R! U& h* I
2.5.1 创建SocketServer TCP服务器 635 G+ Z+ g4 [# U0 n# ^; o& Q
2 z; H8 I, S" f$ I2.5.2 创建SocketServer TCP客户端 64
+ { Z- L% r! @# n7 ]8 p* \1 F, `* ]. X! r9 b( {9 P
2.5.3 执行TCP服务器和客户端 65
) m, h( w( B! b3 [* Y5 V9 h* L8 k0 `
2.6 *Twisted框架介绍 66
! R7 K/ k9 v( ~; F8 C) {
: i7 X% M s0 Z9 e2.6.1 创建Twisted ReactorTCP服务器 66) Y, v9 I( V8 G9 J" q
$ L( E6 H* ^ J3 o9 ^. O
2.6.2 创建Twisted ReactorTCP客户端 67
' _3 \' s$ [2 S8 e# u+ W ], A6 |3 J. v4 J: J. Q
2.6.3 执行TCP服务器和客户端 69
! X+ L4 n7 }2 C- g+ J" t: _
m, t9 X; z& y) d/ j, V2.7 相关模块 69! |: d3 Z0 V. a& V! a1 {+ E4 D* z5 T
' C' {- Q! w' @6 T. O. a8 w' U& t
2.8 练习 704 n; F! a4 A7 {8 w- Z6 W4 \
+ V8 {2 h! g9 [/ y" x
第3章 因特网客户端编程 74, H; g3 l5 F1 [6 _3 T8 c
" s8 a7 J) Y v/ K7 ~- u3 ^8 k
3.1 因特网客户端简介 75! |' I! Q1 h6 C( ^+ p/ ]: [. O
4 U; [' z9 O: c- N1 e% B' M4 a3.2 文件传输 750 J4 s, [7 Y. y4 k/ x% s0 S$ U
1 c! S& P4 B( n7 @3.2.1 文件传输因特网协议 751 b9 |" }3 E/ |3 K" |# [
@# U" f- x+ @4 b5 ^5 @
3.2.2 文件传输协议 76
3 u/ @. B8 M. f$ h. X& n. I; ?* z3 R( l/ N: ?& C
3.2.3 Python和FTP 77" d1 H- w4 {: ?7 W0 V
J' N( K3 v. X' s _. }
3.2.4 ftplib.FTP类的方法 77# k- `# R# X* B# z+ D
6 `# s6 J8 `/ S; \( @" X3.2.5 交互式FTP示例 78
+ Z. V/ U `* K! U* Z' a2 |' S9 B3 }, {
3.2.6 客户端FTP程序示例 79
: ?! p) {$ q2 G. @- M+ V5 l6 o
' s& n$ |" z5 r ^; E3.2.7 FTP的其他内容 80# A' \' |3 v4 E5 e$ g+ c* Y
9 R& \7 s; D: l6 A# Y
3.3 网络新闻 81
/ b6 n- q" x2 g# M0 b9 [; U1 O& }8 A+ F& S2 w7 }: U# X$ ^
3.3.1 Usenet与新闻组 81
J* ]1 |0 Z h+ o6 ]1 c9 y
- h J4 K$ G( e% n3 O0 I1 d% ^3.3.2 网络新闻传输协议 82, t7 r0 Y4 Z: G
h1 X1 T& t b+ q! U; q
3.3.3 Python和NNTP 833 c/ E0 |$ p; f- c' a! ?
, f3 j, \, w7 g2 O; l9 Y; }
3.3.4 nntplib.NNTP类方法 834 }* o, p7 p/ r% v
1 C9 G* V# A7 K8 e9 R) _
3.3.5 交互式NNTP示例 84/ ~8 R: b2 Q; i! W2 w6 ?
5 U& }3 S" x4 `6 G3 F" [3.3.6 客户端程序NNTP示例 85
* k$ u& c. h4 H. s$ O
1 R4 `& Q" f& v. E6 j" N, i I9 ?3.3.7 NNTP的其他内容 89
' Z, R# I1 P1 I- O: E. z
" R5 s/ \+ c) q2 `- z6 O" m3.4 电子邮件 90# e) X t4 ~! q* t7 Q O; i: l
8 A# I+ N* h% j8 w) y3.4.1 电子邮件系统组件和协议 90* ~6 u- g! o b5 Y
( w; |9 A/ r; s& {. B! ?3.4.2 发送电子邮件 91" e7 [ W( @7 f! F4 a* K3 r8 ~
! _8 h4 j ?9 e# K) q
3.4.3 Python和SMTP 924 G% R+ {( p" z2 r7 e! c
3 q0 J$ U& w: E
3.4.4 smtplib.SMTP类方法 92
" ]; j- y0 \4 r* E
! {, e! n7 P7 k! C( r: r2 U3.4.5 交互式SMTP示例 932 ]1 H% x; z& K( q" g) n1 {
$ q6 z. F- ]) `" V
3.4.6 SMTP的其他内容 94
1 D6 R; q8 w) ~5 ^) q4 K5 X
8 @+ j% ~5 K7 @( ^) p9 o3.4.7 接收电子邮件 94% e" u) X [% k
: c1 u& o$ N/ e- M& j3.4.8 POP和IMAP 95
9 ^- k) F- Z R& K, T# C+ G
7 V$ Z1 z$ X$ z3 m6 h3.4.9 Python和POP3 95* r u: n. d4 r B, s
. ?/ r% h" Z1 [& U' `3.4.10 交互式POP3示例 96
: |+ N2 p) i+ E( T$ e$ e
9 M* D3 ~5 u0 O3.4.11 poplib.POP3类方法 97
9 U/ ^- J3 ^! d& k/ Q2 {, y3 ]+ V9 N5 B7 {
3.4.12 客户端程序SMTP和POP3示例 988 l3 R6 p/ ]/ {! R; p% i
. h( Y3 `% ]* @4 n; ~9 P
3.4.13 Python和IMAP4 100
9 z1 W" @3 d% ]( w$ P* |
& D+ T& k: a/ k) o$ n& }0 f3.4.14 交互式IMAP4示例 100
% L U i) F4 V3 O, e1 R G3 Z+ y, h- @. |7 F7 D
3.4.15 imaplib.IMAP4类中的常用方法 101& f* o: T* \' A1 l
% V' ~. {" F0 \. i3.5 实战 102$ K, L) {+ k0 U+ `: t
+ ^/ U9 a( b5 k. _1 M D; l0 h3.5.1 生成电子邮件 1020 u8 L8 M; O" I
6 K" k. E/ M2 A6 B6 A4 H
3.5.2 解析电子邮件 1043 I- S8 ^2 I$ q
5 \5 n4 n4 \ Y- R, y
3.5.3 基于Web的云电子邮件服务 1057 o! z1 I2 x6 x- O
2 B: Y3 }8 n; B+ g3 n3.5.4 zui佳实践:安全、重构 106
' d) @# o3 [4 m# }
2 K7 d, E1 i$ ~2 J0 n* |3.5.5 Yahoo! Mail 1081 [1 M1 S1 b4 X7 {1 U6 P
/ P, x( L7 F3 G0 t
3.5.6 Gmail 112
+ ]4 o; W3 s% D" q5 G6 V2 W- e
9 Z d. t4 ^9 t4 @+ ?3 z; P& `3.6 相关模块 115
9 n) s1 F7 C! v& a0 G( v
7 m" u3 c$ s1 F6 R3.6.1 电子邮件 115
9 }' A: j0 d6 Q5 R7 a
3 ~3 W2 T. h h0 F4 b3.6.2 其他因特网客户端协议 115
2 u3 W6 @1 J* k( h2 |7 C/ h
* \, H7 M/ O# J4 A5 ?! `3.7 练习 116
. [3 R8 W; w a/ L
" C' O' f2 M; H. b5 o第4章 多线程编程 122
3 z% F# f; b( M, m6 J) P2 f2 F- S0 Z* N! ~9 x# Z& _1 |8 f
4.1 简介/动机 123$ X5 V! A% S$ S$ F
& s3 D. o3 U- ?( \4 W4 Z: V# @! t- g
4.2 线程和进程 124
( f6 N" u- O5 j1 c, z
7 Y+ z+ T" Z8 J3 H9 F4.2.1 进程 124" w: v" m$ ?; s$ v% u9 }+ z
! j, k# a5 @1 S: f4.2.2 线程 1244 \# m, [1 G) v5 g4 x
8 i; i1 H1 }# L4 r# p0 _! |4 Q4.3 线程和Python 125
5 T, u; W/ d! Y
, [3 O" a0 m9 B. V- k1 [4.3.1 全局解释器锁 125
, Q( _# T, X$ V0 n) }4 b6 a* \" N4 U8 Z' P8 k" _: o
4.3.2 退出线程 126
0 W2 o+ n0 Q$ k# o' o0 o
A; v1 C6 r$ U- L$ V' \4.3.3 在Python中使用线程 126
9 d0 D& F! F% |' a" H
! f1 O. L4 m; K+ n. }9 v( b) G4.3.4 不使用线程的情况 126
' y0 X$ h2 @: ]0 |3 D3 d( f$ O$ [* s
4.3.5 Python的threading模块 128
& ^, @1 e. M9 n5 n
: W+ @8 Q' B1 v: y1 H% e4.4 thread模块 128
& U: ]% m% {9 W! v9 z# s3 X7 e* U. \2 u, D# L" {4 b: T; S- y
4.5 threading模块 132
* }' e. i1 R9 X/ l0 h3 J4 [- F, k- @1 ?" M+ f* z
4.5.1 Thread类 133( ]# ]2 ?! n$ o h: m" h9 U1 H7 _
& Z! G. X5 N/ [1 C; Y5 _4 ^
4.5.2 threading模块的其他函数 139# T8 g& f2 W: i; }
+ x$ \8 O7 K* R; @$ B$ r
4.6 单线程和多线程执行对比 1403 F( x* G- W4 n) B) h) w S
1 R; n+ K) B! C5 e: N4.7 多线程实践 142
1 H0 _+ f" R+ S8 |- j0 h. ^* R4 {3 g& p3 o
4.7.1 图书排名示例 142
: |) q& x v$ r4 X _* L7 W" V7 {" l" L
- @( \- A9 x- O7 q4.7.2 同步原语 149
; X( N7 a- o- j' M# w, e( p5 d
; M1 v3 z% [$ H9 {. X5 q4.7.3 锁示例 149
( C2 Q9 z; \2 Y: ]% r+ n
. N S8 ~; N/ L1 v! t) a2 v$ s4.7.4 信号量示例 156
! w4 H5 ~! ], E) k' w. k8 N+ j) M- @( n$ `7 c5 Q3 s: z
4.8 生产者-消费者问题和Queue/queue模块 159
$ o U' _- H( N& F# Z, x5 V, a4 L# z' p% K
4.9 线程的替代方案 1621 `, I+ \$ [, ^: N
9 z1 W# s1 W, T7 Q4.9.1 subprocess模块 163! e" S7 p- [& i% @+ V
/ o! t6 x: W/ r/ v4.9.2 multiprocessing模块 163
( K3 n7 h }, _( U6 [& {# V- q p
4.9.3 concurrent.futures模块 163
0 S/ ^( @- K) d; k; x! ]. V& W9 H# S# E: `9 ]1 ^1 Y) e
4.10 相关模块 165
8 M9 M& ^1 Z+ F$ V* Y5 H3 C) m( d9 q, T0 S) F% H- T- J; x( Y4 [
4.11 练习 1654 Y; x" ~3 e+ P
! W! J; G6 M8 J5 E+ R6 e0 A1 h第5章 GUI编程 168
6 X) ]0 a8 R/ u }& h7 t% k( D/ X. R, C/ e) _! |
5.1 简介 169$ U5 z) H# `- x! |
1 n( n; u+ {5 e' p& s5.1.1 Tcl、Tk和Tkinter 1691 N) R0 x4 c( g: X' o8 o
5 R! m8 e4 y9 Y9 U/ U; \, i5.1.2 安装和使用Tkinter 1701 b7 Q3 |; V- b! v6 i+ U5 Q
U6 _2 m+ W9 t& [8 A7 W2 T; Q* g
5.1.3 客户端/服务端架构 170! }6 o2 O$ D4 j/ V K
# J" p" H- I/ Z; w8 W y* V
5.2 Tkinter和Python编程 170
4 E8 {6 W: k3 {. B4 P0 s1 I8 D6 V
" n+ V. P9 z: L6 L8 D5.2.1 Tkinter模块:添加Tk到应用中 171
9 j$ O% l! I+ Q2 K9 W9 S" t! L
* @' z8 Q5 j8 s5.2.2 GUI编程介绍 171& N' ?- ]- i1 I( _0 a {5 D1 K
& p! n0 [7 w4 H& I$ k8 A5.2.3 顶层窗口:Tkinter.Tk() 173. \+ \$ Y7 J* ?; Y: e
2 t# `6 n3 z) a/ h( U& c
5.2.4 Tk控件 173
/ a. ?- L: i1 j# a) r) p& I
- i- d$ T+ r# A) i5.3 Tkinter示例 174% i x6 J, R1 T4 o/ ~ b! \
" R9 ?5 V# D" h) v
5.3.1 Label控件 174
; O6 u3 s5 L9 T' l% a- Z: _2 s# x
k0 [: f5 {* q: a9 x9 \5.3.2 Button控件 175
9 M6 r; j9 p; `2 a/ ^
. Y/ g7 p+ O* i2 K2 r& n5 n: {( a5.3.3 Label和Button控件 175- O& N: F: T( J& m5 J
( d1 A+ V7 h( D* P" B, I1 x, b
5.3.4 Label、Button和Scale控件 176
6 Q" j/ H7 H9 e: C1 V! ]" \& G. Q. L9 p- C O
5.3.5 偏函数应用示例 1789 _: J' R; j m" q
: f- [. @2 v) M5.3.6 中级Tkinter示例 180
T R* x+ v4 ?* w8 g
7 Q/ z9 m( t$ U3 q3 S7 O5.4 其他GUI简介 1854 v2 f1 y3 M8 q" C! u( y
" M6 {6 u7 h- j- T& ]5.4.1 Tk接口扩展(Tix) 187
! T& e% }$ b0 ?: j+ Y0 ]' K# R0 j2 i- H! z3 g: }
5.4.2 Python MegaWidgets(PMW) 188) Q5 |. s* W& C- c6 Q5 v0 e! H, t
' ~9 N" L7 @( `: J0 h) T+ @8 M
5.4.3 wxWidgets和wxPython 188% J% l$ F$ P2 F( Y" g
: _% Q$ o6 Q6 ~* O3 Z1 g K
5.4.4 GTK 和PyGTK 190
2 J- g/ o6 ]- d% r7 Q0 W; W+ u2 V% b, b5 C% p& z+ c/ c
5.4.5 Tile/Ttk 192
: V. a7 S3 b) K4 Q% Z4 h9 ^, D' A4 v* |( R# W
5.5 相关模块和其他GUI 194* D5 O& I3 `- F" @7 K* u2 x& n% S
4 L) T- ^% b2 ? M9 T& K3 N! N
5.6 练习 196
3 i' k' ]9 _) o" \
6 C% {& F+ x$ |* J! I7 l: ~第6章 数据库编程 198, K( ?6 u4 v* N: l. h
8 U" A& D7 I& I6.1 简介 199/ e3 G# T' W- X0 @( |1 J; u
/ U9 j( ]- D' Y7 t; `8 @6.1.1 持久化存储 199, W( u+ C' A0 G7 z V: G, f1 C
) A3 Y, J; d( k* d6.1.2 数据库基本操作和SQL 199
9 [+ u" P5 t* w( X' x! v' k4 p/ H, x1 t5 D9 K0 g
6.1.3 数据库和Python 201 O' ^4 O) Y) I. q9 ^5 ]$ R1 l
$ K1 ]7 v' w4 x5 z
6.2 Python的DB-API 203( i. G' s5 T4 e/ b, p: |/ k( q
4 m O- |, K! C0 W4 r- h" e6.2.1 模块属性 203
( N- {# Y" i2 P
1 w5 X8 c9 e7 Z0 ]6.2.2 Connection对象 205 B5 N) o. Q$ `
! O5 x6 y: T1 G% l6.2.3 Cursor对象 206: B% }. y: G X- F5 m8 l w
& ~9 r% o" m4 X# l( M0 s6.2.4 类型对象和构造函数 207
. ^& L! l# t, p( G
, j T& s$ O5 ]1 \$ o) _' @6.2.5 关系数据库 209# s( }( b+ x3 R. o$ Q
$ A) \( g8 f/ m1 Y6.2.6 数据库和Python:适配器 210+ _$ R% a4 P5 l, U5 a( n) K
. q4 h! ]$ G c. Q% I6.2.7 使用数据库适配器的示例 210
( Z2 [$ C- t) ~# O5 n! B# E+ [9 L# j- b% U% g0 A( }
6.2.8 数据库适配器示例应用 215% m* W8 | e$ y4 [; V
2 x* _# F5 T# i" Y+ u/ n
6.3 ORM 226
& Q* e( v; {5 I& ^2 b; \2 V4 J9 p7 B/ R7 u
6.3.1 考虑对象,而不是SQL 227$ ~' R3 U% ]! {4 ~
/ ~" { Z3 M0 L
6.3.2 Python和ORM 227
2 d) U6 r0 u* S) s3 |. Y
~! ]/ B w) B5 Z6.3.3 员工角色数据库示例 228
# }7 O) ]% Q4 G$ E& S( W, D7 p# k4 A) ~& t
6.3.4 SQLAlchemy 229
, \+ D8 { U( F# ]6 T5 S7 s M6 O$ U
6.3.5 SQLObject 240
6 a. b& |9 x! ] O( R5 r3 k
2 `, Y/ h( ?3 ^1 c6.4 非关系数据库 245
' o4 Z+ R* e. p, L @
3 G7 b3 ?! [% S4 J6.4.1 NoSQL介绍 245
; _# p$ J; N* {5 r# R; h- u
4 P' m8 l5 t3 `# {" Y/ M# }6.4.2 MongoDB 246
( Z! K8 P" i/ [$ H& m: M) N) L$ q, ` q8 y* u
6.4.3 PyMongo:MongoDB和Python 2469 v8 M7 T$ S8 b
8 |% o2 ?0 k0 n& w$ t4 }6.4.4 总结 250
3 v* S7 @' z; E8 C0 ^5 v& x8 p: B S% k) ?) C( A5 k7 y6 G9 e2 T. K
6.5 相关文献 2504 V4 M/ Z9 z5 _5 E# B( S
& N4 b8 E* C* t9 a3 n6.6 练习 252, s( ?) r9 F" v2 F" j: A& n
" `2 `7 n9 v) Z& u/ ~第7章 *Microsoft Office编程 256" K, [2 b) H+ ?; `; w! w: `6 r a
+ P, Y2 S, E3 R2 C
7.1 简介 257
# s# m, l+ m6 [% q3 h4 f7 Q2 r. {' P8 Q# r
7.2 使用Python进行COM客户端编程 257
0 h! E! _6 o# k* ]4 A# ~7 D% x" I& ^6 a* \8 C
7.2.1 客户端COM编程 258
* Q5 V0 p) n8 [9 A9 \; w8 k
- Q7 [4 N( I9 ]" Z7.2.2 入门 258( a9 a* e' w3 z$ }. K9 J- K
* o% I& i- ]0 I' {1 Z
7.3 入门示例 259
. o1 }) X) K" }
; k2 O3 x: v- E( j4 h8 S+ |3 ?# R7.3.1 Excel 259, w2 |3 d0 ]3 y2 I) @1 q. |( w
& d6 j# I! ~1 N5 m
7.3.2 Word 261" Z2 X- }) s8 Q2 N% V @
3 J+ o2 f8 _, P2 k5 J
7.3.3 PowerPoint 262+ C$ j) W, Z) J& U$ g! ?
$ E1 Z$ v }5 N5 V; s7 C1 a; o& ^7.3.4 Outlook 2643 |) I$ h8 Q3 z3 ^/ u h6 w
1 o4 a1 c+ P" q l7.4 中级示例 266' \2 g5 R1 g, D" r: A/ Z+ a
* j8 S7 b/ l' \5 T* U! u/ y7.4.1 Excel 266: O* L" g4 a0 d8 z
1 E; V# m# \, w6 B: ?. j
7.4.2 Outlook 268
/ K" O8 u% D1 f, A3 R) |) }4 v, d
7.4.3 PowerPoint 273+ L- J$ \, b: t6 I/ |) X' C
( F5 {" N5 U( O, L& d9 p. L# {/ L7.4.4 总结 2804 W7 O# T9 W8 B3 F! ~- J
: \ T6 J9 L; S" s7.5 相关模块/包 281
+ B1 q) w+ ]3 M5 d. J2 t; u: o" K8 C) H; @4 T5 j, _; l
7.6 练习 281
+ y" k2 v7 ^. V" m6 W
5 s$ n+ C( J. H第8章 扩展Python 286
% L2 {, x. N/ Q' n( Y; R# E( p4 p% B# z( ?
8.1 简介和动机 2871 R( D0 z' D) V! b1 J& C
$ b ^3 B/ N9 x, E/ h8.1.1 Python扩展简介 2879 n! Z9 T3 {/ s4 i/ G
1 W8 \' F! E r7 @$ G# E8.1.2 什么情况下需要扩展Python 2886 m; x6 `. _5 U% q8 e4 c3 `. a
4 g8 _7 w, ]* t
8.1.3 什么情况下不应该扩展Python 2884 ?1 h+ J* ~8 G4 w: _
6 x- z9 l& `+ R/ G! W8.2 编写Python扩展 289
! U9 I1 f: `2 O, L7 K0 e* h
. X4 k" d% J9 R/ B( V8.2.1 创建应用代码 289
. N g" c# x1 C1 D: `5 d1 o( o! }9 s$ h' j; ~
8.2.2 根据样板编写封装代码 291
- ]0 v+ Q4 r: v/ s# a3 ~' Y0 ~
. g) k0 p- l0 C/ v8.2.3 编译 296
: x# w; }7 V4 A# ?, E4 F* F. s; \
8.2.4 导入并测试 297
* k. V) [5 d( p8 _4 o8 m$ K! x; @9 |% G8 n" Y2 G8 W; Y( L
8.2.5 引用计数 300% z. S/ Q2 \ [1 v2 O2 f# O0 w
2 O. ?% @% @8 ^) s8.2.6 线程和全局解释器锁 301* U) j& h. G# z; C
. X) N3 r8 n& L7 V+ V& i i8.3 相关主题 302
" c& {, u' E b( K3 i: @6 z. _7 c' @# A j& R- {6 l
8.3.1 SWIG 3023 Y# L: V, U% |
0 L5 q7 X& j2 o+ }* v6 e
8.3.2 Pyrex 302
) b( D1 N# w( F# U7 o" o r( Y/ x( a
8.3.3 Cython 302
2 v; y. g4 i/ U8 Q* _, x% s/ b0 N" s/ M* U
8.3.4 Psyco 303
5 {0 ?0 c4 P$ Q2 }
4 P# p) r! {. X* L. G8.3.5 PyPy 303
2 x8 G6 D+ j4 s- F; l7 j
/ d( I' [% T n8 C1 ]7 v8.3.6 嵌入Python 3045 y- b/ I: p/ j. c+ t8 W- d u$ \
1 u+ _8 ]+ ~/ Y* {" j0 g
8.4 练习 304
/ L: B( f1 C* N: o) ], W8 b Q# u! |
; ~1 P# [3 ^' G5 X' ?★ 第二部分 Web开发
( f1 U, X8 [& g6 z( R8 Q
4 ]8 U" Y1 J% f; R" T第9章 Web客户端和服务器 306
* \% r" {+ h% N
+ _8 e8 z: D( l! i4 _' d9.1 简介 307
$ r# r. Y* ^: W, Z3 z" Q
! U! j7 G7 f5 V( P3 R3 [9.1.1 Web应用:客户端/服务器计算 307# i8 `* m, } j
3 N2 ` V3 M! x6 ~1 q9.1.2 因特网 308
1 I- z, O6 G1 |3 B. k
0 o5 Z8 S/ Y* v8 k( Z9.2 Python Web客户端工具 310
& L: w' J1 x0 l! X1 }$ K# n% f+ U! K8 e' v q
9.2.1 统一资源定位符 310+ a; K5 Z s o* C# }. t3 ?7 Z
( w' M5 K+ W$ O& z* }1 s
9.2.2 urlparse模块 312) X& y- y- [" Z( [$ ?9 X+ N+ j" N
' U* E% x/ _+ o+ H9.2.3 urllib模块/包 3135 b, x3 |! y" a7 N4 h) b
5 f; j9 ^2 n \/ W- F: Y
9.2.4 使用urllib2 HTTP验证的示例 317
8 h6 W" X! `! `* X, H# J6 }) J/ ~( B( w7 S) S5 _
9.2.5 将HTTP验证示例移植到Python3中 319
" ]) s6 N7 u' _ X
" V: `+ ?/ R" ]7 f5 r9.3 Web客户端 3226 Y% O: I9 f7 ^3 B) ]
# H: h& c% j1 \- o9.3.1 一个简单的Web爬虫/蜘蛛/机器人 322
7 y( t. ^5 j3 G" w: g8 m" f7 F, A8 u# y
9.3.2 解析Web页面 328* i$ t* A G$ w- q% L0 `( A
4 o% B! T" m+ }* t4 W6 ]
9.3.3 可编程的Web浏览 333/ g5 r2 M# \4 s9 v: ]* \+ o2 L
* J T3 [7 G k O9 Z
9.4 Web(HTTP)服务器 336
& L k1 c1 f C' g( {. T: d4 f
6 y, ]0 D3 r, I y9.5 相关模块 339
% h- v8 R5 ~- [
4 @* A) [8 B7 b, u9.6 练习 341
/ U/ m6 r8 P9 K( e: A! `% {0 V6 ]) D! \! f5 U
第10章 Web编程:CGI和WSGI 345
) N8 ]6 O# v4 ~, o4 `3 A! |" i
( }! H, s# O: M9 n2 z10.1 简介 3467 [8 r* l3 w* [3 p" e6 K
2 B" T/ p/ `9 p9 `% Q
10.2 帮助Web服务器处理客户端数据 3465 c! H3 e6 A- R8 D& H/ N
. k, \& V2 o0 d" e0 B m& }1 U
10.2.1 CGI简介 346
5 M, C) d/ }0 P: {) n, W0 ~5 X' Y( H/ B, y% ^
10.2.2 CGI应用程序 3477 G8 k' o' R0 M4 @8 b2 Y3 X8 W1 B
4 j' q2 J0 S- `/ S! Q* M' c7 u* q10.2.3 cgi模块 348. |% i6 ?! z J1 f0 y0 X' p
$ V: h5 P c+ y) t! e, |10.2.4 cgitb模块 348
+ J- ]6 ^: f9 I8 X% c( c5 E, @
5 ?. _# T2 F/ M) s+ E10.3 构建CGI应用程序 349
3 M o" M( q; ^; M) R2 U, I& F% h3 p% |0 e. S, I0 c1 N
10.3.1 构建Web服务器 349
) r( h6 X2 [+ ]1 w+ Z
8 K7 T/ ^4 E6 w! |0 L10.3.2 建立表单页 351" o% y* U# h% w2 S& D
D/ H. |0 p+ ], L
10.3.3 生成结果页面 352 G/ K% S$ D0 m+ o, A: }9 n: L
9 E6 _" H+ Z* ^' G+ F0 E T10.3.4 生成表单和结果页面 3531 H8 g: E- J2 Z0 K2 _; P
1 O8 P! j) a; f/ b' z: P: D
10.3.5 全面交互的Web站点 357
+ X; Q5 T f3 X: D: j
# R2 R2 k1 K, Z10.4 在CGI中使用Unicode 362" c2 i7 P! s. \4 g) p& n+ f
# E6 d/ [. q f5 z$ b7 l( I+ H10.5 高级CGI 364
8 ^$ ?8 U! L% B0 D/ S4 D$ r$ d1 I3 C' z& U
10.5.1 mulitipart表单提交和文件上传 364
* z1 a0 X8 Z# q3 x5 @8 \& `$ q8 o3 [9 \0 J" v8 { }
10.5.2 多值字段 364
* Z, `) u, h$ F- a1 U
, F- U' J7 j4 S) _10.5.3 cookie 365
_- N. p' J f; V" G$ m, r. T H3 G" m. V- t, G
10.5.4 cookie和文件上传 365" S' x0 k) m5 b7 ^1 b: S7 p+ u
1 k$ {) g: u% A+ y# z7 c* Y
10.6 WSGI简介 373
# h7 e W9 f% J, R
1 \6 E- a: `; P& M/ t4 x. `4 y; F10.6.1 动机(替代CGI) 373" ]. _) [& Q8 S+ @$ S% a" d
/ D6 p5 g# B8 g, V( y( d
10.6.2 服务器集成 374& L# \% g% a8 J4 g9 b
% G0 s) C6 W2 o2 P* L( n+ O10.6.3 外部进程 374% F& S* H- B! `. ?4 A. Q( @" s
' e9 t1 X [% ]6 K8 K10.6.4 WSGI简介 3756 ~& C \( {- M/ Q2 u, h
* s1 }2 ~; N/ U S. ~5 U3 \9 C: G5 F
10.6.5 WSGI服务器 376! h8 W9 ^0 n5 q3 x
3 {" S* X( B' R X- s
10.6.6 参考服务器 377/ }) V: b5 j3 u
6 R: V+ [ u" ~$ o% @10.6.7 WSGI应用示例 378
3 Z, g) H4 U( T; `7 `
& G! f$ X, m6 l5 q10.6.8 中间件及封装WSGI应用 378" U1 R0 f* q2 _6 I2 H5 n
: h2 y# ~8 N# `
10.6.9 在Python 3中使用WSGI 379
9 k: O0 ~: b3 b' C5 e1 Y. ~2 v
8 S8 e- j/ z$ S4 _3 k; h' Q10.7 现实世界中的Web开发 380! Q4 J, j% }) l
- z& r* i4 G3 s( x4 t3 ]
10.8 相关模块 380; l2 \! Z' V5 k7 u4 |1 Q2 c
7 X; e# m$ G) s5 E. \( ?10.9 练习 381
$ q( q# J' C c) E
; \6 i$ k; k" }1 v+ ^2 g第11章 Web框架:Django 384' |/ j: |3 A+ f+ c& u# ]5 x
: }. u3 R- ^5 J- A11.1 简介 385, Z7 ?/ w5 s) ^! B P$ H9 j
( \* K" x z' z2 G7 i. E! f
11.2 Web框架 385
6 R+ [9 L2 [7 }# ] o; U) ], w2 v B0 l
11.3 Django简介 386" T O0 f: q4 [' J5 d) R
. I! @) f3 x0 ?& ^; G; h3 }11.4 项目和应用 390
4 D4 F" c' i: s: m, z9 J3 A7 j
) e4 g0 N- `6 e' J* `11.4.1 在Django中创建项目 390
. O$ L/ w6 c% ^
' p! b- ?1 b5 _11.4.2 运行开发服务器 393, g$ L6 s; n0 O/ V4 L( W r
7 m: B2 g0 `3 b8 I11.5 “Hello World”应用(一个博客) 394
, E+ D [7 M8 E( i& V
M) b4 o+ @) X; p# z11.6 创建模型来添加数据库服务 396
8 j3 w8 v! O' f, i/ A3 p* v+ M& S% U/ h
11.6.1 设置数据库 396- c: J5 K$ c$ I1 M" @2 f2 ^
3 N- k; y8 J1 @" A; p+ X
11.6.2 创建表 398
0 y$ q0 G3 H) b) a
) X5 J* J8 M: M: M11.7 Python 应用shell 400" P6 i! J6 v# v/ v3 t
. T& {; ]3 K' Y5 j6 g8 K& r; X
11.7.1 在Django中使用Pythonshell 400
6 S% }+ @5 R& `" Q$ l6 q, I- E8 Z! [4 m2 z: ]
11.7.2 测试数据模型 402
+ }7 A8 m, _+ }* `# e8 S" H, B C& t3 S7 n/ A; ]
11.8 Django管理应用 403
' k4 n' Y* S0 U
) ^# {, H+ T }$ Q11.8.1 设置admin 403
# s$ y" f; M/ J3 ]7 E1 e' A
6 @/ e7 r, T( i( A B3 F11.8.2 使用admin 404! M+ g4 _4 v& I& S0 `3 l
0 o+ b5 n2 w3 C11.9 创建博客的用户界面 410
9 @2 H1 ^% o9 f" ]
. L5 s; t) ?% h! u- J3 y11.9.1 创建模板 4111 q, d8 O& o# n( Z1 Y4 j
- x# \9 V# u; y: k11.9.2 创建URL模式 412
# a$ E* r! X/ n+ p1 K
8 J$ i( t! w5 S! ?* X. B11.9.3 创建视图函数 415
/ s3 r+ B# @8 M5 u
1 U0 i x( A3 d9 D, k$ y11.10 改进输出 418
0 ^' o# ?) X9 a, a( X: l4 V4 Z* z2 K% v5 }
11.11 处理用户输入 422( c0 u+ Z0 t: X, X6 v0 m
9 I* r2 g4 B% D% c) E* b9 w8 E' G* u+ V11.11.1 模板:添加HTML表单 423! {; `2 X7 f G3 b4 d
* {1 N# h" v& s z8 c; j" l11.11.2 添加URLconf项 423
4 u$ Q4 c9 `/ W. L1 K" U) y
& t' {+ I* q( c' t11.11.3 视图:处理用户输入 423
9 `+ z. _. D+ q+ ?# A( V$ Z- Z" a" X* j( P; D
11.11.4 跨站点请求伪造 424
5 ?* [0 X6 Y4 L5 z+ X9 P2 }( v) Z% n9 C' m ~" f9 ?
11.12 表单和模型表单 426# R/ J4 Y) s3 t2 D9 ^5 N' q2 J
8 O+ H/ E" b J5 ^3 _# U3 Y2 X11.12.1 Django表单简介 426
8 |* K6 m+ s! e: \
( Y; z; ~( t9 v11.12.2 模型表单示例 427
. s! o4 `: \( h3 ~1 o3 i x/ \; `! M N9 ~8 b* P$ j
11.12.3 使用ModelForm来生成HTML表单 427- Q" f* a, `5 R% [- T9 ~9 D
8 T) ^8 z: f3 e6 g0 q0 V1 b* m11.12.4 处理ModelForm数据 4284 Z+ Y- N" i- a% C, H
6 G3 R0 X; O; {: H/ K- Y
11.13 视图进阶 429
3 o# G7 |, k+ d* M, I$ w0 d" l3 A0 A# u" I% P* m& m
11.14 *改善外观 431
9 J Q6 v( `: I" v, I& x. b3 N8 [7 x0 D2 o9 t
11.15 *单元测试 432
) B0 X. g, P- b' r9 H
- U" Z' ~: A7 O11.15.1 blog应用的代码审查 434
. P7 r4 z" G, D! ~) N3 f( d1 l6 B/ S5 ~' X* C: Q
11.15.2 blog应用总结 439
9 y, _: p& ~% m+ E& n" G& D' Y5 I5 {; b* q) c9 m
11.16 *中级Django应用:TweetApprover 439
- `" D, ]( n- F7 V ?5 A0 _* _7 p
7 D7 Y6 C4 {, f- l/ {11.16.1 创建项目文件结构 440 s5 i* @0 a7 A/ X9 @
L6 f6 q! e( ]" l( H8 L9 V11.16.2 安装Twython库 445
/ H4 F$ `8 O! U( A4 W) x; Y: Q7 v( L% P3 z/ q- g. o3 _
11.16.3 URL结构 446
8 y: d1 t5 L' F, S. I
7 n6 Z* F q( w- C11.16.4 数据模型 449
6 O1 F% ^' l0 q1 F3 E2 {. o
- `3 d3 n( x2 Q. ~, X% N11.16.5 提交新推文以便审核 453
# p1 C. q* m% i7 F4 C5 O- k6 t
9 |" K1 `8 g- p' c( D- T9 X3 x+ b( o11.16.6 审核推文 4570 t, m/ R6 Y( \- z' Z8 I3 ?
/ F8 y5 v% E% ~* X
11.17 资源 465, D) a, L- A/ i3 T* x
' ~0 o7 l _. w11.18 总结 465( K& ~& I/ K& s2 E* q# x J3 h
& f2 f$ G( ~) k; i, s1 ]11.19 练习 466
/ v( B2 q' W! h2 j' q
4 ?' d. F" n4 ?( r第12章 云计算:Google App Engine 4703 R6 S; J4 t& R8 w8 P; \
' g# o* Y2 }+ q" U% q: r9 q12.1 简介 471
9 H9 x( \2 L; C( l, p/ _7 y6 M2 ~/ H* _4 r/ W+ t
12.2 云计算 471
4 ^( a# V* ]4 y4 a9 `3 D3 h" i Z1 v5 U: R
12.2.1 云计算服务的层次 472
0 Y# a, X6 {6 M) G; [
7 k4 G2 w f8 l0 I( e0 B5 M. U3 h) |12.2.2 App Engine 473
- o/ Z2 }5 o5 z r
) u6 R$ g7 M' R5 l12.3 沙盒和App Engine SDK 476
g& v9 j2 O }7 n- d
K& x3 j1 b6 c) C12.4 选择一个App Engine框架 479
3 Q( e) c* f; y6 o' j$ d
3 [9 G; W% j8 j. i# K, A12.5 Python 2.7支持 4854 l1 S2 Q" P9 G0 T
h% S* k' R) b+ A0 J, w- Y, d* \12.5.1 一般差异 4864 G- R2 E6 `' f; |- `3 U; _
, `, F& s3 J% n G% P1 s% J12.5.2 代码中的差异 4866 X- Z% T4 g5 V
7 R3 j9 s9 I& U) n' U) V3 x12.6 与Django比较 487
" a( ?, L1 L3 ^. `6 E- E# t, u8 q" r
12.6.1 开始“Hello World” 487
+ V: G# B, p; [
6 u! u/ [- ]! o0 [12.6.2 手动创建“Hello World”(Zip文件用户) 488
* C) Y: r" C, J. [/ j( D: d( X2 ]
12.7 将“Hello World”改成一个 简单的博客 489
$ ?( ?) G: [9 u2 [0 t& X5 v
$ N# q) p+ P) h" G3 c12.7.1 快速发现改动:30秒内将纯文本转成HTML 489( Y. y& h6 V/ V
; M, a- h8 I2 }9 x) U' E* q12.7.2 添加表单 490
9 u( X$ {: y: g, [8 P1 _ {$ g0 p: P0 Q& N t- s
12.7.3 添加Datastore服务 492
) ^1 J" k$ c5 i; ^+ m/ A( X# t
6 A1 L1 f4 Q t8 e; x12.7.4 迭代改进 496
$ ^5 D( T# l e# D B
- V$ A( H& R) F0 x( z12.7.5 开发/SDK控制台 496) I' g! p7 [) f+ Q$ ] x; e: i
$ w& X! B I7 h) x! g12.8 添加Memcache服务 502
$ w& `: [! ~6 |$ b" o" u9 q0 |2 K# G. R) u, O; [
12.9 静态文件 505$ s- i% c3 Z1 |3 B2 C( I: N
/ c/ Q/ i& ^( S/ e% m1 }3 V1 b
12.10 添加用户服务 5052 Q$ ] N% e# r0 k2 D& k
( O- @! \9 O" }5 e% a7 L& J8 r2 I2 z: s12.10.1 Google账号验证 506" ?6 |+ r# r6 y
1 r" Q! `5 C# w2 l
12.10.2 联合验证 507% X& o- l Y1 ~) X/ y
' g _; L0 i2 c7 I3 z8 e3 @: Q12.11 远程API shell 507
+ w9 N1 O+ R5 E v9 X4 }' z- X6 E6 [9 C# D6 s7 E$ G% S( _
12.12 问与答(Python实现) 509* f# u5 X* \+ B/ T. C2 _
; [. N* `5 X8 B! h+ t! |6 `* \12.12.1 发送电子邮件 509# _, h* Z; y0 Z) C5 m- ]* e0 b, A
; \/ W- t8 v+ t) A
12.12.2 接收电子邮件 510
% m1 {4 q( A$ l% f, G G
; z* s# Q! H' c12.13 使用XMPP发送即时消息 512
, ^! G8 N# Y0 w0 e/ R" z. [+ K ^8 n `% j& W# Q
12.14 处理图片 5148 `( E( h3 ^0 J* D X# ^* j6 q5 o
, ?2 W( g g Z* f$ B, c12.15 任务队列(非定期任务) 514
1 {5 ?0 t9 `. [* Z+ d3 C' w! G, ~4 i. b' ~6 _1 I
12.15.1 创建任务 515! B: @( Y$ e- J/ L( l
, M) Q1 ?! Y* K. _# P- w9 ?( i12.15.2 配置app.yaml 515
, G* k/ ?9 t) \- h' w9 s$ `# w9 i1 D1 @/ M L
12.15.3 其他任务创建选项 516
6 m; x, d- H/ r/ c9 Y+ G u3 S5 z8 w" E
12.15.4 将发送电子邮件作为任务 517
3 |8 U" x! F# B7 H1 z' M( q# d6 u, p U$ u# D
12.15.5 deferred包 519# Z9 b; } w) R* H" q9 H9 @
1 Z$ r2 n3 T8 S$ Q+ u% @12.16 使用Appstats进行分析 520
9 t1 U& l/ h6 o! y3 n1 C; r2 Q& l- h4 k5 `
12.16.1 在app.yaml中添加标准处理程序 521
@' x$ c5 \2 B* w6 M* \8 b
( J" s- j0 h( O9 J; Q# V12.16.2 添加自定义Admin Console页面 521
7 ^ e- F* i* @1 d
; L2 S/ p" S; \12.16.3 作为内置界面启用界面 5211 M0 L- O" a* H" E1 d
+ a4 n3 u5 W- O12.17 URLfetch服务 522' [# ^7 w3 B6 w8 a
5 \ C- q& `+ R1 n5 ?' J7 q) e
12.18 问与答(无Python实现) 5227 @8 A! a" i6 u
6 I- P; D! m9 M( A
12.18.1 Cron服务(计划任务作业) 523
7 ]: _! B p% v7 ]/ j% x
; ^( b1 R. |2 F5 j7 i) u12.18.2 预热请求 523
+ L; M; |+ c5 [* g% l+ \6 } d2 v, ~. n! x& U& d
12.18.3 DoS保护 5248 Z" _3 e8 T F% t' y* ~
/ A; r; k7 q& ~% H$ p$ ~3 D12.19 厂商锁定 524
6 t) |8 Y- A8 L! k& W, D6 U( g/ T! \; X# e1 t, C+ c# o6 Q
12.20 资源 525" L; M6 i% i/ r
2 [# N" a5 s6 s& y$ U0 w- V- ]$ T
12.21 总结 526
3 E( Y% r4 J9 {" G9 w& Z. t% Q- a
! p6 r: J: _ w" {6 N12.22 练习 527
! `) {7 Q1 {+ J9 {- `# {0 Z' z/ Z2 h
第13章 Web服务 530/ H5 A' c. J# Z; ]) a: [
W2 C- h* N* _8 }5 f+ X9 Q13.1 简介 531
0 W* E7 `: S+ N* h& n2 O2 u" n s# U* {
13.2 Yahoo!金融股票报价服务器 531* o5 U+ p9 u4 Q: o) s7 k
9 \5 }6 l$ k: \& \8 [13.3 Twitter微博 534) r3 e9 n+ ~+ x, y
* }' r9 J7 v5 Z" _13.3.1 社交网络 534
1 b& u- Z# ^+ g' D* x9 ~4 R0 m0 h" j6 D7 j0 U5 X
13.3.2 Twitter和Python 535$ G( n. q6 Y* X4 ]
: K- X+ @! B* B: i$ e: A8 J13.3.3 稍微长一点的API组合应用示例 537
4 ]' z2 M" u7 y3 A* d
( }( t. r5 L, T% J1 d13.3.4 总结 547
/ d; p. O$ w" F& a: }2 P9 N9 ^! N" g# R. h
13.3.5 额外在线资源 5483 b) S5 D" W0 q0 r
6 e: v+ P# b' V D( @9 _# `13.4 练习 548
- f3 X3 y1 L8 q
- E+ s) L: ]8 m. C" e" u% q/ r
7 C" r+ T* ^! O7 F5 t+ A" x★ 第三部分 补充/实验章节( }/ B& C/ R; A+ L) f1 f
9 t* O; O. j _+ |2 @9 x第14章 文本处理 553
! l% v( }1 _! G U4 m# ]0 k& }7 u; n( Y7 u
14.1 逗号分隔值(CSV) 5545 l4 _9 V/ S' K# D, `9 ^
& L* F& v1 B) R7 ?7 j0 H, R. c
14.1.1 CSV简介 554
p E6 G$ \7 ?- y; Q* ~2 Y8 ^' ?/ T/ J9 m$ E$ u x! n- @) b6 W. M
14.1.2 再论股票投资组合示例 556! I; F+ v8 _2 B, ]- u
. Z- H- S, T5 |9 r y5 B
14.2 JSON 557
/ D# L" f' Y" l4 ]# B
1 ^0 k o2 ?/ T14.3 可扩展标记语言 5619 n, m- ^2 u4 Q9 {$ G3 A* c
}' m a7 m) C8 }. K& v14.3.1 XML简介 562$ t! D: O8 l9 P/ y, Q
2 d! d! Z j0 ]14.3.2 Python和XML 5627 e& `- t; ]6 v' n3 l9 F6 `' p
+ J* {" X' n5 b; f. a1 F* ^14.3.3 XML实战 5664 c8 P1 S. k0 U7 v
! r$ \/ r4 W4 J' y% j14.3.4 *使用XML-RPC的客户端-服务器服务 5693 }4 ~. |4 S1 |7 ?, J; c( v$ J! q
* f+ F! L4 z0 A5 G# t9 F: v* Q
14.4 参考文献 573
% o; K; B) o* ^% _6 p! r6 |' \$ \- H- A/ B
14.5 相关模块 574
# c7 U& R2 R* t/ p; _
6 Q, E, {" b! X- b8 k14.6 练习 574$ a/ p( I7 d, `5 z
4 O9 J) G: G$ g
第15章 其他内容 5771 r8 z* Y# m; h" N. d
0 X$ {6 d, s# d2 ]% s+ G! O15.1 Jython 578
. y {4 r, r0 ?8 A3 t2 Q
& h* ~6 i$ X+ R15.1.1 Jython简介 578
( T) O" s% A- \9 r7 f3 o- g& J0 J5 z0 m8 r M
15.1.2 Swing GUI开发示例 579
5 i' @8 `! E2 D7 N9 e0 F
$ |6 Z: X) l0 m1 b& V7 o/ p15.2 Google 581
/ K! z2 d$ ^/ U3 b4 N c
0 w5 f' X6 m( d2 F15.2.1 Google 平台简介 582
4 T. ?4 ~; ?& z
3 e- ~5 n0 o% U' n15.2.2 Python和Google API 582
3 t1 ^' S) p1 g0 q- k' Z) C4 d9 [/ C) T9 G
15.2.3 一个简单的社交媒体分析工具 582, M+ ]* o5 C N4 J* a
9 n0 ~2 g: J$ H4 L1 O2 O5 |/ s15.3 练习 590: g l0 w, b; Q! v
* a9 U- o" h" E# b; \
*附录A 部分练习参考答案 593
* ?" X' G/ C2 \- S9 P1 `# P1 Y2 J H. a8 F
*附录B 参考表 5977 {) I1 @( }2 J( w& x& G
6 ]8 }+ Z ^( _7 Y, oB.1 Python关键字 597
, x, ]" @+ Y: Z; F T- [
4 {! q/ t3 C0 Z4 I+ x; |6 OB.2 Python标准操作符和函数 598
* `% X, V, k2 \+ R* {3 C- H: n9 H7 D/ C9 G' A
B.3 数值类型操作符和函数 599$ ^0 \8 p# d3 X% U$ U7 X0 B; \
' {7 ?; w# E1 |+ p1 sB.4 序列类型操作符和函数 600
( j. T, V. j' t" B4 w+ L1 s" G9 k% E0 M4 l7 d
B.5 字符串格式化操作符转换符号 602
. o) _' v1 T `1 c9 _- R% `. {
$ c1 x* S# L1 [' c3 V+ U( CB.6 字符串格式化操作符指令 603) A, f- g* o' w% @: }8 G
3 G) I1 r$ y4 K* N
B.7 字符串类型内置方法 603
) C0 |- h- i6 S0 z; A7 v
7 t* N+ Y1 N- kB.8 列表类型内置方法 605# p ?+ T [5 d0 |2 g* ]% H
1 q% a6 b+ j5 X% G. `
B.9 字典类型内置方法 605. h6 D$ z. s3 s5 c! D
6 J+ U* `7 [ t+ XB.10 集合类型操作符和内置函数 606
) b3 d- F6 @" C6 D [5 b
( Q$ j+ D8 ~% f6 D2 e1 bB.11 文件对象方法和数据属性 607# v5 g& }3 u0 Y# C
6 H. x$ f7 \& `: BB.12 Python异常 608
- M8 i$ m, R3 K
@7 v9 s$ h. h) ]/ m6 TB.13 类的特殊方法 610
, J# \9 _8 T: i! h& O5 X2 U# |/ L- B+ q8 }" E: H7 ~2 ^
B.14 Python操作符汇总 612$ o8 x& I1 M) M. f
% s7 d' b! T4 f" A( ]$ W; `*附录C Python 3:一种编程语言进化的产物 614' K) V' R! f$ V2 j0 M7 u
1 r3 Z( H2 j" t2 \
C.1 为何Python在变化 6140 x V, f. ]4 Z" R; k
: ~# v- e8 r, P
C.2 都发生了哪些变化 615
8 g) d1 t7 p4 f7 C5 D- d2 l3 W' d
0 O% }1 p$ ^+ @C.2.1 print变成了print() 615
$ s# H L+ p3 ?8 ]$ R) u! p& Z3 }6 q9 Y' [9 k+ A$ @ ^% e5 Z
C.2.2 字符串:默认为Unicode编码 616
* M% C/ y% @) W2 N, y* k; E' p; H' d: u/ v, D$ a; C. U
C.2.3 单类类型 616/ E4 \9 @' ^6 y; t8 S& A1 z2 E7 h8 n
" i$ `! X" h/ D4 m3 U6 cC.2.4 更新异常的语法 617" v* \4 q1 B$ {; Z
, `: E, P( W& [0 c, c% L# wC.2.5 整数的更新 618
) O2 I+ i* c/ q+ |* C
; A6 U0 b$ q; e2 _ rC.2.6 迭代器无处不在 619' D( m3 u# M7 w
3 `) i7 o5 Z3 D% K# fC.3 迁移工具 619 l+ z2 k3 g& a6 M
* g F- v& W2 n/ K) P7 r1 r3 h
C.3.1 2to3工具 619
8 b, I! w. A" U6 o; n! D
% y8 A% j4 B, Q, X$ M# m, g- sC.3.2 Python 2.6 620
+ l0 M4 V; K8 a9 V3 h( c
+ ?6 ?" Z3 E/ S) ]6 G% ?. rC.4 结论 620
7 H& \! R0 E& Y J
5 b( a. C% p/ n, C7 q! TC.5 参考资料 620
# P8 s+ G# v. X6 c1 i" A( `5 x3 G+ Z
*附录D 利用Python 2.6 向Python 3迁移 622
`# d& r. C+ s! W6 e6 A+ S1 z; k6 L W% A
D.1 Python 3:Python的下一代 622
: r [4 |6 L8 E7 k0 ]0 o& K
. m; l1 D; B/ n1 q( T6 rD.2 整数 623
* A2 f' w6 O! q& {8 r/ y, w! _1 ^0 o9 [7 x% Y
D.2.1 单整数类型 624
9 h& X! ]( `% ~+ z; S2 x
) W6 n: G* i e7 `, p6 ]D.2.2 新型二进制和改进的八进制字符 624, Q1 f7 A/ P+ L6 X* A
, V/ @$ Y! m4 T: cD.2.3 经典除法或真除法 625+ O0 Z y ]4 n$ S r3 E( l
7 ^" s K) b' Q8 V- [
D.3 内置函数 626
7 n o8 a1 ^$ G6 g/ Q4 i* M
! j0 R4 Q$ w6 a" j- p1 N4 Z' BD.3.1 print语句或print()函数 626
" d6 q: N* [' [
% } O! ^) `3 u" k9 ]7 }D.3.2 reduce()转移到了functools模块中 627- d' l/ L- L( z% N
4 W4 k( }: `) ?, E, O: f9 \9 W
D.3.3 其他更新 627
( b. W% `% K, B6 i& \1 d; \
+ y) ~* W9 N! f% e. ^ v) z% k& ^% xD.4 面向对象编程:两种不同的类对象 628- p9 q5 j; E' \% N+ T, R- _& I5 i
' i. O% ~( f6 g7 i; ^# qD.5 字符串 629! v# O7 p) }) T4 e
3 b5 E1 ~. G! f4 r8 q- K* h2 KD.6 异常 630
0 a+ Y" L' j- c2 `' `! k9 C& ~) [7 [0 o# c
D.6.1 处理异常(使用as) 630
0 Q" G" A5 N3 V+ F0 w3 D& a
; G2 B) t: B! _$ ]' Y/ i/ Z; RD.6.2 抛出异常 630. ]% u+ o! N2 y9 K
- m* V) s; [2 ]9 ^( e' `" qD.7 其他转换工具和技巧 631
9 l' K6 Q2 M7 z, g$ J
3 @( ~, |; _7 Z& I: yD.8 编写兼容版本2.x和3.x的代码 632
6 Q( g! n9 G9 X: D) q; q) m* @4 U" I) ], J) P& m
D.8.1 对比print和print() 632
- t' x2 R$ u% Y1 f! ]& `, ~& f
5 d3 o% U+ c- O+ \; T0 |$ a RD.8.2 将你的方法导入解决方案中 633& j" g9 x0 }! b: s6 t- D5 g% x, [# M: ]
1 t/ J% I3 o( o$ b- }; V
D.8.3 整合在一起 634* l0 \! ~- U/ T
$ d8 P5 c4 L" G% W+ P3 t
D.9 结论 635/ U' i2 R8 V. l
" y8 e( F- {( R2 L. w- U
|
|