Outline

klipitiklopwarrenΛογισμικό & κατασκευή λογ/κού

7 Νοε 2013 (πριν από 3 χρόνια και 10 μήνες)

114 εμφανίσεις



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

Chapter 35


Python

Outline

35.1

Introduction


35.1.1

First Python Program


35.1.2

Python Keywords

35.2

Basic Data Types, Control Statements and Functions

35.3

Tuples, Lists and Dictionaries

35.4

String Processing and Regular Expressions

35.5

Exception Handling

35.6

Introduction to CGI Programming

35.7

Form Processing and Business Logic

35.8

Cookies

35.9

Database Application Programming Interface (DB
-
API)


35.9.1

Setup


35.9.2

Simple DB
-
API Program

35.10

Operator Precedence Chart

35.11

Web Resources



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

Objectives


In this lesson, you will learn:


To understand basic Python data types.


To understand string processing and regular expressions in
Python.


To use exception handling.


To perform basic CGI tasks in Python.


To construct programs that interact with MySQL databases
using the Python Database Application Programming
Interface (DB
-
API).



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.1

Introduction



Python


Interpreted


Cross
-
platform


Object
-
oriented


Large
-
scale Internet search engines


Small administration scripts


GUI applications


CGI scripts


Freely distributed



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.1.1

First Python Program



Python


Can be executed on a program stored in a file


Can run in interactive mode


Users enter lines of code one at a time


Enables programmers to test small blocks of code quickly



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_01.py

(1 of 1)

1
# Fig. 35.1: fig35_01.py

2
# A first program in Python

3

4
print

"Welcome to Python!"



Welcome to Python!





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.1.1

First Python Program


Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit
(Intel)] on win32

Type "copyright", "credits" or "license" for more
information.

>>> print "Welcome to Python!"

Welcome to Python!

>>> ^Z



Fig. 35.2

Python in interactive mode.



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.1.2

Python Keywords



Python is case
-
sensitive


Keywords can be obtained from
keyword module



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.1.2

Python Keywords

Python
keywords







and

continue

else

for

import

not

raise

assert

def

except

from

in

or

return

break

del

exec

global

is

pass

try

class

elif

finally

if

lambda

print

while

Fig. 35.3

Python keywords.



Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit
(Intel)] on win32

Type "copyright", "credits" or "license" for more
information.

>>> import keyword

>>> print keyword.kwlist

['and', 'assert', 'break', 'class', 'continue', 'def',
'del', 'elif', 'else',
'except', 'exec', 'finally',
'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'not', 'or', 'pass', 'print', 'raise',
'return', 'try', 'while']

>>>



Fig. 35.4

Printing Python keywords in interactive mode.



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.2

Basic Data Types, Control Statements
and Functions



Introduces basic data types, control statements,
and functions


while

loop


if

statement


Modulo operator (
%

)


return

keyword


if

elif

else

statement


Line
-
continuation character (
\

)


Escape sequences



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_05.py

(1 of 2)

1
# Fig. 35.5: fig35_05.py

2
# Program to illustrate basic data types, control structures and

3
# functions.

4

5
def
greatestCommonDivisor( x, y ):

6

gcd = min( x, y )


7

8

while
gcd >=
1
:

9

10


if
( x % gcd ) == ( y % gcd ) ==
0
:

11

return
gcd

12

else
:

13
gcd
-
=
1

14


15
def
determineColor( color ):

16


17

if
color ==
"green"
:


18

print

"You entered green!"

19

elif
c
olor ==
"purple"
:

20

print

"You entered purple!"

21

else
:


22

print

"You did not enter green or purple."

23

24
number1 = int( raw_input(
"Enter a positive integer: "
) )

25
number2 = int( raw_input(
"Enter
a positive integer: "
) )




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_05.py

(2 of 2)

26

27
print

"The greatest common divisor is"
,
\

28
greatestCommonDivisor( number1, number2 )

29

30
for
entry
in
range(
5
):


31

colorChoice = raw_input(
"
\
nEnter your favorite color: "
)

32

determineColor( colorChoice )



Enter a positive integer: 2

Enter a positive integer: 30

The greatest common divisor is 2


Enter your favorite color: yellow

You did not enter green or purple.


Enter your favorite color: green

You entered green!


Enter your favorite color: black

You did
not enter green or purple.


Enter your favorite color: purple

You entered purple!


Enter your favorite color: red

You did not enter green or purple.





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.2

Basic Data Types, Control Statements
and Functions

Escape
sequence

Meaning

\
n

Newline (line feed).

\
r

Carriage return.

\
t

Tab.

\
'

Single quote.

\
"

Double quote.

\
b

Backspace.

\
\

Backslash.

Fig. 35.6

Escape sequences.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.3

Tuples, Lists and Dictionaries



list


A sequence of related data


Tuple


A list whose elements may not be modified


Immutable


Singleton


One
-
element tuple


Dictionary


A list of values that are accessed through their associated
keys



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_07.py

(1 of 3)

1
# Fig. 35.7: fig35_07.py

2
# A program that illustrates tuples, lists and dictionaries.

3

4
# tuples

5
aTuple = (
1
,
"a"
,
3.0
)
# create tuple


6
firstItem = aTuple[
0
]
# first tuple item


7
secondItem = aTuple
[
1
]
# second tuple item

8
thirdItem = aTuple[
2
]
# third tuple item


9

10
print

"The first item in the tuple is"
, firstItem

11
print

"The second item in the tuple is"
, secondItem

12
print

"The third item in the tuple is"
, th
irdItem

13
print

14

15
firstItem, secondItem, thirdItem = aTuple

16
print

"The first item in the tuple is"
, firstItem

17
print

"The second item in the tuple is"
, secondItem

18
print

"The third item in the tuple is"
, thirdItem

19
print

20

21
aTuple += (
4
, )

22
print

"Used the += statement on the tuple"


23
print

24




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_07.py

(2 of 3)

25
# print the tuple

26
print

"The raw tuple data is:"
, aTuple

27
print

"The items in the tuple are:"

28

29
for
item
in
aTuple:
# print each item

30

print
item,


31

32
print

# end previous line

33

print

# blank line

34

35
# lists

36
aList = [
1
,
2
,
3
]
# create list


37
aList[
0
] =
0

# change first element of list

38
aList.append(
5
)
# add item to end of list


39

40
print

"The r
aw list data is:"
, aList
# print list data

41
print

42

43
aList += [
4
]
# add an item to the end of the list

44
print

"Added an item to the list using the += statement"

45
print

46

47
# print each item in the list

48
print

"The items in the list are:"

49




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_07.py

(3 of 3)

50
for
item
in
aList:

51

print
item,


52

53
print

# end previous line

54
print

# blank line

55

56
# dictionaries

57
aDictionary = {
1
:
"January"
,
2
:
"February"
,
3
:
"March"
,


58

4
:
"April"
,
5
:
"May"
,
6
:
"June"
,
7
:
"July"
,

59

8
:
"August"
,
9
:
"September"
,
10
:
"October"
,


60

11
:
"November" }


61
aDictionary[
12
] =
"December"

# add item to dictionary

62

63

print

"The raw dictionary data is:"
, aDictionary

64
print

"
\
nThe entries in the dictionary are:"

65

66
for
item
in
aDictionary.keys():


67

print

"aDictionary[ "
, item,
" ] = "
, aDictionary[ item ]




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.


The first item in the tuple is 1

The second item in the tuple is a

The third item in the tuple is 3.0


The first item in the tuple is 1

The second item in the tuple is a

The third item in the tuple is 3.0


Used the += statement on the tuple


The raw tuple
data is: (1, 'a', 3.0, 4)

The items in the tuple are:

1 a 3.0 4


The raw list data is: [0, 2, 3, 5]


Added an item to the list using the += statement


The items in the list are:

0 2 3 5 4


The raw dictionary data is: {12: 'December', 11: 'November', 10: '
October', 9:
'September', 8: 'August', 7: 'July', 6: 'June', 5: 'May', 4: 'April', 3: 'March',
2: 'February', 1: 'January'}


The entries in the dictionary are:

aDictionary[ 12 ] = December

aDictionary[ 11 ] = November

aDictionary[ 10 ] = October

a
Dictionary[ 9 ] = September

aDictionary[ 8 ] = August

aDictionary[ 7 ] = July

aDictionary[ 6 ] = June

aDictionary[ 5 ] = May

aDictionary[ 4 ] = April

aDictionary[ 3 ] = March

aDictionary[ 2 ] = February

aDictionary[ 1 ] = January





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.3

Tuples, Lists and Dictionaries

Method

Purpose

append(

item

)

Inserts
item
at the end of the list.

count(

item

)

Returns the number of occurrences of
item
in the list.

extend(

newList

)

Inserts
newList
at the end of the list.

index(

item

)

Returns the index of the first occurrence o
f
item
in the list.
If the element is not in the list, a
ValueError
exception
occurs. [
Note:
We discuss exceptions in Section

35.5]

insert(

index
,
item

)

Inserts
item
at position
index
.

pop(
[
index
]
)

Removes and returns the last element in the list. If
parameter
index
is specified, removes and returns the
element at position
index
.

remove(

item

)

Removes the first occurrence of
item
from the list. If
item

is not in the list, a
ValueError
exception occurs.

reverse()

Reverses the items in the list.

sort
(
[
function
]
)

Sorts the items in the list. Optional parameter
function
is a
comparison function that may be user defined.

Fig. 35.8

Python list methods.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.3

Tuples, Lists and Dictionaries

Method

Description

clear()

Deletes all items from the dictionary.

copy()

Creates a copy of the dictionary.

get(
key [, falseValue]
)

Returns the value associated with
key.
If
key
is not
in the dictionary and if
falseValue
is specified,
returns the speci
fied value.

has_key(
key
)

Returns
1
if
key
is in the dictionary; returns
0
if
key

is not in the dictionary.

items()

Returns a list of tuples that are key
-
value pairs.

keys()

Returns a list of keys in the dictionary.

setdefault(

key
[,
falseValue
]
)

Be
haves similarly to method
get
. If key is not in
the dictionary and
falseValue
is specified, inserts
the key and the specified value into the dictionary.

update(
otherDictionary
)

Adds all the key
-
value pairs from
otherDictionary

to the current dictionary
.

values()

Returns a list of values in the dictionary.

Fig. 35.9

Dictionary methods.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.4

String Processing and Regular
Expressions



Regular expression


Used to search through strings, text files, databases, and so
on


Regular
-
expression string


Defines a pattern with which text data can be compared



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_10.py

(1 of 2)

1
# Fig. 35.10: fig35_10.py

2
# Program to illustrate use of strings

3

4
# simple string assignments

5
string1 =
"This is a string."

6
print
string1


7

8
string2 =
"This is a second string."

9
print
strin
g2


10

11
# string concatenation

12
string3 = string1 +
" "
+ string2

13
print
string3


14

15
# using operators

16
string4 =
'*'


17
print

"String with an aste
risk: "
+ string4


18
string4 *= 10


19
print

"String with 10 asterisks: "
+ string4

20

21
# using quotes

22
print

"This is a string with
\
"double quotes.
\
""

23
print

'This is another string with "double quo
tes."'

24
print

'This is a string with
\
'single quotes.
\
''

25
print

"This is another string with 'single quotes.'"




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_10.py

(2 of 2)

26
print

"""This string has "double quotes" and 'single quotes.'"""

27

28
# string formatting

29
name = raw_input(
"Enter your name: "
)

30
age = raw_input(
"Enter your age: "
)

31
print

"Hello, %s, you are %s years old."
% ( name, age )



This is a string.

This is a second string.

This is a string. This is a second string.

String with an asterisk: *

String with 10 asterisks: **********

This is a string with "double quotes."

This is another string with "double quotes."

This is a string with
'single quotes.'

This is another string with 'single quotes.'

This string has "double quotes" and 'single quotes.'

Enter your name: Brian

Enter your age: 33

Hello, Brian, you are 33 years old.





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.4

String Processing and Regular
Expressions

Symbol

Meaning

c

Single character (i.e., a string of length 1).

s

String.

d

Signed decimal integer.

u

Unsigned decimal integer.

o

Unsigned octal integer.

x

Unsigned hexadecimal integer (using format
abcdef
).

X

Unsigned hexadecimal integer (using fo
rmat
ABCDEF
).

f

Floating
-
point number.

e
,
E

Floating
-
point number (using scientific notation).

g
,
G

Floating
-
point number (using least
-
significant digits).

Fig. 35.11


String
-
format characters.




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_12.py

(1 of 2)

1
# Fig. 35.12: fig35_12.py

2
# Program searches a string using the regular expression module.

3

4
import
re

5

6
searchString =
"Testing pattern matches"

7

8
expression1 = re.compile( r
"Test"
)


9
expression2
= re.compile( r
"^Test"
)


10
expression3 = re.compile( r
"Test$"
)


11
expression4 = re.compile( r
"
\
b
\
w*es
\
b"
)


12
expression5 = re.compile( r
"t[aeiou]"
, re.
I
)

13

14
if

expression1.search( searchString ):

15

print

'"Test" was found.'

16


17
if

expression2.match( searchString ):

18

print

'"Test" was found at the beginning of the line.'

19

20
if

expression3.match( searchString ):

21

print

'"Test" was found at the end of the line.'

22



23
result = expression4.findall( searchString )

24




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_12.py

(2 of 2)

25
if
result:

26

print

'There are %d words(s) ending in "es":'
%
\

27
( len( result ) ),

28


29

for
item
in
result:

30

print

" "
+ item,

31

32
print

33
result = expression5.findall( searchString )

34

35

if
result:

36

print

'The letter t, followed by a vowel, occurs %d times:'
%
\

37
( len( result ) ),

38

39

for
item
in
result:

40

print

" "
+ item,

41

42
print





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.4

String Processing and Regular
Expressions

Character

Matches

^

Beginning of string.

$

End of string.

.

Any character, except a newline.

*

Zero or more occurrences of the pattern.

+

One or more occurrences of the preceding pattern.

?

Zero or one occurrence of the preceding pattern.

{m,

n}

Bet
ween
m
and
n
occurrences of the preceding pattern.

\
b

Word boundary (i.e., the beginning or end of a word).

\
B

Nonword boundary.

\
d

Digit (
[
0

9
]
).

\
D

Nondigit.

\
w

Any alpha
-
numeric character.

[...]

Any character defined by the set.

[^...]

Any charac
ter not defined by the set.

Fig. 35.13


re
module’s regular
-
expression characters.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.5

Exception Handling



Enables programs and programmers to identify an
error when it occurs and take appropriate action


try

except

blocks



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.5

Exception Handling


Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit
(Intel)] on win32

Type "copyright", "credits" or "license" for more
information.

>>> 1 / 0

Traceback (most recent call last):

File "<stdin>", line 1, in ?

ZeroDivisionError: integer division or modulo
by zero

>>>



Fig. 35.14

Interactive session illustrating a
ZeroDivisionError

exception.



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_15.py

(1 of 1)

1
# Fig. 35.15: fig35_15.py

2
# A simple program that illustrates exceptions.

3

4
def
getFloat():

5

return
float( raw_input(
"Enter a number: "
) )

6

7
number1 = number2 = None

8

9
while
number1 == None:

10

tr
y
:


11
number1 = getFloat()

12

except
ValueError:


13

print

"Value entered was not a number"

14

15
while
number2 == None:

16

try
:



17
number2 = getFloat()

18

except
ValueError:


19

print

"Value entered was not a number"

20

21
try
:


22
result = number1 / number2

23
except
ZeroDivisionError:



24

print

"Cannot divide by zero!"

25
else
:

26

print

"The result of division is: %f"
% result




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.6

Introduction to CGI Programming



Use Python on the Web


cgi


For access to XHTML forms


Directive (pound
-
bang or Shebang)


Provides server with location of Python executable


cgi

module


Provides functionalities for writing CGI scripts


environ

data member


Holds all environment variables


Cookie


To read and write cookies


smtplib


To manipulate SMTP messages


urllib


To manipulate Web data


ftplib


To perform client
-
side FTP tasks



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_16.py

(1 of 2)

1
#!c:
\
Python
\
python.exe

2
# Fig 35.16: fig35_16.py

3
# Program to display CGI environment variables

4

5
import
os

6
import
cgi

7

8
print

"Content
-
type: text/html"

9
print

10

11
print

"""<!DOCTYPE html PUBLIC

12

"
-
//W3C//DTD XHTML 1.0 Transitional//EN"

13
"DTD/xhtml1
-
transitional.dtd">"""

14

15
print

"""

16
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

17
lang="en">

18
<head><title>Environment Variables</title></head>

19
<body><table style = "border: 0">"""

20

21
rowNumber =
0

22

23
for
item
in
os.environ.keys():

24
rowNumber +=
1

25




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_16.py

(2 of 2)

26

if
rowNumber %
2
==
0
:

27
backgroundColor =
"white"

28

else
:

29
backgroundColor =
"lightgrey"

30

31

print

"""<tr style = "background
-
color: %s">

32
<td>%s</td><td>%s</td></tr>"""
\

33

% (
backgroundColor, item,


34

cgi.escape( os.environ[ item ] ) )

35

36
print

"""</table></body></html>"""




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.7

Form Processing and Business Logic



XHTML forms


Allow users to enter data to be sent to a Web server for
processing



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_17.html

(1 of 3)

1
<!DOCTYPE html PUBLIC

2

"
-
//W3C//DTD XHTML 1.0 Transitional//EN"

3

"DTD/xhtml1
-
transitional.dtd"
>

4
<!
--
Fig. 35.17: fig35_17.html
--
>

5

6
<html xmlns =
"http://www.w3.org/1999/xhtml"
xml:lang=
"en"

7
lang=
"en"
>

8
<head>

9
<title>
Sample FORM to take user input in HTML
</title>

10
</head>

11

12
<body style =
"font
-
family: Arial, sans
-
serif; font
-
size: 11pt"
>

13


14
<div style =
"font
-
size: 15pt; font
-
weight: bold"
>

15
This is a s
ample registration form.

16

</div>

17
Please fill in all fields and click Register.

18


19

<form method =
"post"
action =
"/cgi
-
bin/fig35_18.py"
>

20
<img src =
"images/user.gif"
alt =
"user"
/><br />

21
<div styl
e =
"color: blue"
>

22
Please fill out the fields below.
<br />

23

</div>

24

25
<img src =
"images/fname.gif"
alt =
"firstname"
/>




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_17.html

(2 of 3)

26
<input type =
"text"

name =
"firstname"
/><br />

27
<img src =
"images/lname.gif"
alt =
"lastname"
/>

28
<input type =
"text"

name =
"lastname"

/><br />

29
<img src =
"images/email.gif"
alt =
"email"
/>

30
<in
put type =
"text"

name =
"email"
/><br />

31
<img src =
"images/phone.gif"
alt =
"phone"
/>

32
<input type =
"text"

name =
"phone"
/><br />

33

34
<div style =
"font
-
size: 8pt"
>

35
Must be in the form (555)555
-
55
55
<br/><br/>

36
</div>

37

38
<img src =
"images/downloads.gif"
alt =
"downloads"
/><br />

39
<div style =
"color: blue"
>

40
Which book would you like information about?
<br />

41
</div>

42

43

<select
name =
"book"
>

44
<option>
XML How to Program
</option>

45
<option>
Python How to Program
</option>

46
<option>
E
-
business and E
-
commerce How to Program
</option>

47
<option>
Internet and WWW How to Program
3
e
</option>

48
<option>
C++ How to Program 4
e
</option>

49
<option>
Java How to Program
5
e
</option>

50
<option>
Visual Basic How to Program
</option>




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_17.html

(3 of 3)

51
</select>

52
<br /><br />

53

54
<img src =
"images/os.gif"
alt =
"os"
/><br />

55
<div style =
"color: blue"
>

56
Which operating system are you

57
currently using?
<br />

58
</div>

59

60
<input type =
"radio"

name =
"os"
value =
"Windows XP"

61
checked =
"checked"
/>

62

Windows XP

63
<input type =
"radio"
name =
"os"
value =
"Windows 2000"
/>

64

Windows 2000

65
<input type =
"r
adio"
name =
"os"
value =
"Windows 95_98"
/>

66

Windows 95/98/ME
<br />

67
<input type =
"radio"
name =
"os"
value =
"Linux"
/>

68

Linux

69
<input type =
"radio"
name =
"os"
value =
"Other"
/>

70

Other
<br />

71

<input type =
"submit"
value =
"Register"
/>

72

73
</form>

74
</body>

75
</html>




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_18.py

(1 of 4)

1
#!c:
\
Python
\
python.exe

2
# Fig. 35.18: fig35_18.py

3
# Program to read information sent to the server from the

4
# form in the form.html document.

5

6
import
cgi

7
import
re

8

9
# the regular expression for matching m
ost US phone numbers

10
telephoneExpression =
\

11
re.compile( r
'^
\
(
\
d{3}
\
)
\
d{3}
-
\
d{4}$'
)

12

13
def
printContent():

14

print

"Content
-
type: text/html"

15

print

16

print

"""

17
<html xmlns = "http://www.w3.org/1999/xhtm
l" xml:lang="en"

18
lang="en">

19
<head><title>Registration results</title></head>

20
<body>"""

21


22
def
printReply():

23

print

"""

24
Hi <span style = "color: blue; font
-
weight: bold">

25
%(firstName
)s</span>.




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_18.py

(2 of 4)

26
Thank you for completing the survey.<br />

27
You have been added to the <span style = "color: blue;

28
font
-
weight: bold">%(book)s </span> mailing list.<br /><br />

29

30
<span style = "font
-
weight: bold">

31

The following information has been saved in our database:

32
</span><br />

33

34
<table style = "border: 0; border
-
width: 0;

35
border
-
spacing: 10">

36
<tr><td style = "background
-
color: yellow">Name </td>

3
7
<td style = "background
-
color: yellow">Email</td>

38
<td style = "background
-
color: yellow">Phone</td>

39
<td style = "background
-
color: yellow">OS</td></tr>

40

41
<tr><td>%(firstName)s %(lastName)s</td>
<td>%(email)s</td>

42
<td>%(phone)s</td><td>%(os)s</td></tr>

43
</table>

44

45
<br /><br /><br />

46

47
<div style = "text
-
align: center; font
-
size: 8pt">

48
This is only a sample form.

49

You have not been added to a mailing list.

50
</div></center>




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_18.py

(3 of 4)

51

"""
% personInfo

52

53
def
printPhoneError():

54

55

print
"""<span style = "color: red; font
-
size 15pt">

56
INVALID PHONE NUMBER</span><br />

57
A valid phone number must be in the form

58
<span style
= "font
-
weight: bold">(555)555
-
5555</span>

59
<span style = "color: blue"> Click the Back button,

60
enter a valid phone number and resubmit.</span><br /><br />

61
Thank You."""

62


63
def
printFormError():

64

6
5

print

"""<span style = "color: red; font
-
size 15pt">

66
FORM ERROR</span><br />

67
You have not filled in all fields.

68
<span style = "color: blue"> Click the Back button,

69
fill out the form and resubmit.</spa
n><br /><br />

70
Thank You."""

71


72
printContent()

73

74
form = cgi.FieldStorage()

75




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_18.py

(4 of 4)

76
try
:


77

personInfo = {
'firstName'
: form[
"firstname"
].value,

78

'lastName'
: form[
"lastname"
].value,


79

'email'
: form[
"email"
].value,



80

'phone'
: form[
"phone"
].value,


81

'book'
: form[
"book"
].value,


82

'os'
: form[
"os"
].value }


83
except
KeyError:



84

printFormError()


85


86
if
telephoneExpression.match( personInfo[
'phone'
] ):


87

printReply()


88
else
:



89

printPhoneError()





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.8

Cookies



Small text files


State information


Username


Password


Specific information helpful when user returns


Etc.



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_19.html

(1 of 2)

1
<!DOCTYPE html PUBLIC

2

"
-
//W3C//DTD XHTML 1.0 Transitional//EN"

3

"DTD/xhtml1
-
transitional.dtd"
>

4
<!
--
Fig. 35.19: fig35_19.html
--
>

5

6
<html xmlns =
"http://www.w3.org/1999/xhtml"
xml:lang =
"en"


7

lang =
"en"
>

8
<head>

9
<title>
Writing a cookie to the client computer
</title>

10
</head>

11

12
<body style =
"background
-
image: images/back.gif;

13

font
-
family: Arial,sans
-
serif; font
-
size: 11pt"
>

14

15
<span style =
"fon
t
-
size: 15pt; font
-
weight: bold"
>

16
Click Write Cookie to save your cookie data.

17
</span><br />

18


19

<form method =
"post"
action =
"/cgi
-
bin/fig35_20.py"
>

20
<span style =
"font
-
weight: bold"
>
Name:
</span><br />

2
1
<input type =
"text"
name =
"name"
/><br />

22
<span style =
"font
-
weight: bold"
>
Height:
</span><br />

23
<input type =
"text"
name =
"height"
/><br />

24
<span style =
"font
-
weight: bold"
>
Favorite Color
</span><br />

25

<input type =
"text"
name = "color" /><br />




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_19.html

(2 of 2)

26
<input type =
"submit"
value =
"Write Cookie"
/>

27
</form>

28

29
</body>

30
</html>




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_20.py

(1 of 3)

1
#!C:
\
Python
\
python.exe

2
# Fig. 35.20: fig35_20.py

3
# Writing a cookie to a client's machine

4

5
import
cgi

6
import
Cookie

7
import
time

8

9
def
printContent():

10

print
"Content
-
type: text/html"

11

prin
t

12

print

"""

13
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

14
lang="en">

15
<head><title>Cookie values</title></head>"""

16

17
form = cgi.FieldStorage()
# get form information

18

19
try
:
# extract form
values

20
name = form[
"name"
].value

21
height = form[
"height"
].value

22
color = form[
"color"
].value

23
except
KeyError:

24
printContent()

25
print
"""<body><h3>You have not filled in all fields.




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_20.py

(2 of 3)

26
<span style = "color: blue"> Click the Back button,

27
fill out the form and resubmit.<br /><br />

28
Thank You. </span></h3>"""

29
else
:

30

31

# construct cookie expiration date and path

32
expirationFormat =
"%A, %
d
-
%b
-
%y %X %Z"

33

expirationTime = time.localtime( time.time() +
300
)


34

expirationDate = time.strftime( expirationFormat,


35

expirationTime )


36

path =
"/"



37

38

# construct cookie contents

39

cookie = Cookie.SimpleCookie()


40

41

cookie[
"Name"
] = name


42

cookie[
"Name"
][
"expires"
] = expirationDate

43

cookie[
"Name"
][
"path"
] = path


44

45

cookie[
"Height"
] = height


46

cookie[
"Height"
][
"expires"
] = expirationDate

47

cookie[
"Height"
][
"path"
] = path


48

49

cook
ie[
"Color"
] = color


50

cookie[
"Color"
][
"expires"
] = expirationDate




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_20.py

(3 of 3)

51

cookie[
"Color"
][
"path"
] = path


52


53
# print cookie to user and page to browser

54

print
cookie

55

56
printContent()

57

print

"""<body style = "background
-
image: /images/back.gif;

58
font
-
f
amily: Arial,sans
-
serif; font
-
size: 11pt">

59
The cookie has been set with the following data: <br /><br />

60

61
<span style = "color: blue">Name:</span> %s<br />

62
<span style = "color: blue">Height:</span> %s<br />

63
<span
style = "color: blue">Favorite Color:</span>

64

<span style = "color: %s"> %s</span><br />"""

\

65
% ( name, height, color, color )

66

67

print

"""<br /><a href= "fig35_21.py">

68
Read cookie values</a>"""

69

70
print

""
"</body></html>"""





2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_21.py

(1 of 2)

1
#!C:
\
Python
\
python.exe

2
# Fig. 35.21: fig35_21.py

3
# Program that retrieves and displays client
-
side cookie values

4

5
import
Cookie

6
import
os

7

8
print

"Content
-
type: text/html"

9
print

10
print

"""

11
<htm
l xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

12
lang="en">

13
<head><title>Cookie values</title></head>

14
<body style =

15
font
-
family: Arial, sans
-
serif; font
-
size: 11pt">"""

16

17
try
:

18

cookie = Cookie.Si
mpleCookie()


19

cookie.load( os.environ[
"HTTP_COOKIE"
] )


20
except
KeyError:

21

print

"""<span style = "font
-
weight: bold">Error reading cookies

22
</span>"""

23
else
:

24

print

"""<span style = "font
-
weight: bo
ld">

25
The following data is saved in a cookie on your computer.




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_21.py

(2 of 2)

26
</span><br /><br />"""

27

28

print

"""<table style = "border
-
width: 5; border
-
spacing: 0;


29
padding: 10">"""

30


31

for
item
in
cookie.keys():

32

print
"""<tr>

33
<td style = "background
-
color:
lavender">%s</td>

34
<td style = "background
-
color: white">%s</td>

35

</tr>"""
%
( item, cookie[ item ].value )

36


37

print

"""</table>"""

38

39
print

"""</body></html>"""




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.9

Database Application Programming
Interface (DB
-
API)


Python Database Special Interest Group (SIG)


Formed to develop a specification for Python database
application programming interface (DB
-
API)



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.9.1

Setup



MySQL and the
MySQLdb

module must be
installed



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.9.2

Simple DB
-
API Program



Lets user choose an author from XHTML drop
-
down list


User clicks button to query database


Database query returns a list of all books by
author



2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_22.py

(1 of 2)

1
#!c:
\
Python
\
python.exe

2
# Fig. 35.22: fig35_22.py

3
# A program to illustrate Python's database connectivity.

4
import
MySQLdb

5

6
print

"Content
-
type: text/html"

7
print

8
print

"""

9
<html xmlns = "http://www.w3.org
/1999/xhtml" xml:lang="en"

10
lang="en">

11
<head><title>Select Author</title></head>

12
<body style =

13
font
-
family: Arial, sans
-
serif; font
-
size: 11pt">"""

14

15
try
:


16


connection = MySQLdb.connect( db =
"books"
)


17
except
OperationalError:


18

print

"Unable to connect to database: %s"
% message

19
else
:


20

cursor =
connection.cursor()


21

cursor.execute(
"SELECT * FROM Authors"
)


22

authorList = cursor.fetchall()


23

24

cursor.close()
# close cursor


25

connection.cl
ose()
# close connection





2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_22.py

(2 of 2)

26


27

print

"""

28
<form method = "post" action = "/cgi
-
bin/fig35_23.py">

29
<select name = "authorID">"""

30

31

for
author
in
authorList:

32
print
"""<option value = %d>%s, %s</option>"""

\

33

% ( author[
0
], author[
2
], author[
1
] )

34

35

print
"""

36
</select>

37
<input type = "submit" value = "Execute Query" />

38
</ form>"""

39

40
print

"""</body></html>"""




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_23.py

1 of 3

1
#!c:
\
Python
\
python.exe

2
# Fig. 35.23: fig35_23.py

3
# A program to illustrate Python's database connectivity.

4

5
import
cgi

6
import
MySQLdb

7
import
sys

8

9
# get results from form

10
form = cgi.FieldStorage()

11

12
print

"Content
-
type: text/html"

13
print

14
print

"""

15
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang="en"

16
lang="en">

17
<head><title>Query results</title></head>

18
<body style =

19
font
-
family: Ari
al, sans
-
serif; font
-
size: 11pt">"""

20

21
try
:

22
authorID = form[
"authorID"
].value

23
except
KeyError:

24

print

"""<span style = "color: red size = 15pt">

25
FORM ERROR</span><br />




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_23.py

(2 of 3)

26
You did not select an author.<br />

27
<span style = "color: blue"> Click the Back button,

28
fill out the form and resubmit.<br /><br />

29
Thank You.</span></body></html>"""

30
sys.exit()

31

32
# connect to databas
e and get cursor

33
try
:

34
connection = MySQLdb.connect( db =
'books'
)

35
except
OperationalError:

36

print

"""<span style = "color: red size = 15pt">

37
DATABASE ERROR</span><br /> Unable to connect to database.

38
</body><
/html>"""

39
sys.exit()

40

41
queryString =
"""select Titles.* from Titles, AuthorISBN


42


where AuthorISBN.AuthorID=%s and


43


Titles.ISBN=AuthorISBN.ISBN"""
% authorID


44

45
cursor = conne
ction.cursor()


46
cursor.execute( queryString )

47


48
results = cursor.fetchall()


49

50
cursor.close()
# close cursor




2003 Prentice Hall, Inc.

All rights reserved.

Outline



2003 Prentice Hall, Inc.

All rights reserved.

Outline

fig35_23.py

(3 of 3)

51
connection.close()
# close connection

52

53
# display results

54
print
"""<table style = "border: groove 2 pt;

55
border
-
colapse: separate">

56
<tr>

57
<th>ISBN</th>

58
<t
h>Title</th>

59
<th>Edition</th>

60
<th>Year</th>

61
<th>Description</th>

62
<th>Publisher ID</th>

63
</tr>"""

64

65
for
row
in
results:

66

print
"<tr>"

67


68


for
entry
in
row:

69

print

'<td style = "border: solid 2pt">%s</td>'
% entry

70

71

print

"</tr>"


72

73
print
"""</table></body></html>"""




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.10

Operator Precedence Chart

Operator

Type

Associativity

' '

string conversion

left to right

{ }

dictionary creation

left to right

[ ]

list creation

left to right

( )

tuple creation or expression grouping

left to right

( )

function call

left to right

[ : ]

slicing

left to right

[ ]

subscript access

left to right

.

member access

left to right

**

exponentiation

right to left

~

bitwise NOT

left to right

+

-

unary plus

unary minus

right to left

*

/

%

multiplication

division

modulus (remainder)

left to right

Fig. 35.24

Python o
perator precedence chart.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.10

Operator Precedence Chart

Operator

Type

Associativity

+

-

addition

subtraction

left to right

<<

>>

left shift

right shift

left to right

&

bitwise AND

left to right

^

bitwise XOR

left to right

|

bitwise OR

left to right

<

<=

>

>=

!=

==

less than

less than or equal

greater than

greater than or equal

not equal

equal

left to right

Fig. 35.24

Python operator precedence chart.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.10

Operator Precedence Chart

Operator

Type

Associativity

is
,
is

not

identity

left to right

in
,
not

in

membership tests

left to right

not

boolean NOT

left to right

and

boolean AND

left to right

or

boolean OR

left to right

lambda

lambda expressions (anonymous
functions)

left to ri
ght

Fig. 35.24

Python operator precedence chart.




2003 Prentice Hall, Inc. All rights reserved.



2003 Prentice Hall, Inc. All rights reserved.

35.11

Web Resources



www.python.org


www.zope.com


www.zope.org


starship.python.net


www.python.org/download/download_mac.html


www.vex.net/parnassus


www.pythonware.com


starship.python.net/crew/davem/cgifaq/faqw.cgi


www.devshed.com/Server_Side/Python/CGI


starship.python.net/crew/aaron_watters/pws.html


www.python.org/doc/howto/regex/regex.html


www.python.org/windows/win32com


gadfly.sourceforge.net


aspn.activestate.com/ASPN/Python/Cookbook


www.python.org/windows/win32/odbc.html


starship.python.net/crew/bwilk/access.html


www.python.org/doc/Comparisons.html


www.vic.auug.org.au/auugvic/av_paper_python.html


www.networkcomputing.com/unixworld/tutorial/005/005.html