Head First Python 7 web开发
[email protected] webapp$ tree
.
├── cgi-bin
│ ├── athletemodel.py
│ ├── generate_list.py
│ ├── generate_timing_data.py
│ ├── kelly_c.py
│ └── yate.py
├── coach.css
├── data
│ ├── athletes.pickle
│ ├── james.txt
│ ├── julie.txt
│ ├── mikey.txt
│ └── sarah.txt
├── favicon.ico
├── images
│ └── coach-head.jpg
├── index.html
├── simple_httpd.py
└── templates
├── footer.html
└── header.html
4 directories, 17 files
点击(此处)折叠或打开
-
-rw-r--r--. 1 t t 263 5月 25 10:17 ./simple_httpd.py
-
#!/usr/bin/env python3
-
# -*- coding:utf-8 -*-
-
-
-
from http.server import HTTPServer, CGIHTTPRequestHandler
-
-
port = 8080
-
-
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
-
print("Starting simple_httpd on port: " + str(httpd.server_port))
-
httpd.serve_forever()
-
-rwxrwxr-x. 1 t t 672 5月 25 10:34 ./cgi-bin/generate_list.py
-
#!/usr/bin/env python3
-
# -*- coding:utf-8 -*-
-
-
#导入M,V
-
import athletemodel, yate
-
#glob 模块可以向操作系统查询一个文件名列表
-
import glob
-
-
#生成一个选择运动员列表html页面
-
data_files = glob.glob('data/*.txt')
-
athletes = athletemodel.put_to_store(data_files)
-
-
print(yate.start_response())
-
print(yate.include_header("kelly教练的运动员列表"))
-
-
print(yate.start_form("generate_timing_data.py"))
-
print(yate.para("从列表中选择一个运动员:"))
-
for each_athlete in athletes:
-
print(yate.radio_button("which_athlete",athletes[each_athlete].name))
-
print(yate.end_form("Select"))
-
-
- print(yate.include_footer({"Home":"/index.html"}))
-
-
-
-
-
-
-
-
-
-
-
-
-rwxrwxr-x. 1 t t 746 5月 25 11:33 ./cgi-bin/generate_timing_data.py
-
#!/usr/bin/env python3
-
# -*- coding:utf-8 -*-
-
-
#使用cgi模块处理表单数据
-
import cgi
-
#cgi跟踪模块
-
import cgitb
-
cgitb.enable()
-
#将所有表单数据放在一个字典中
-
form_data = cgi.FieldStorage()
-
athlete_name = form_data['which_athlete'].value
-
-
import athletemodel,yate
-
#取出pickle数据
-
athletes = athletemodel.get_from_store()
-
-
#生成运动员时间显示页面
-
print(yate.start_response())
-
print(yate.include_header("时间数据信息"))
-
print(yate.header("运动员:" + athlete_name + ", 出生日期:" + athletes[athlete_name].dob + "."))
-
print(yate.para("最佳三次成绩为:"))
-
print(yate.u_list(athletes[athlete_name].top3))
- print(yate.include_footer({"Home":"/index.html","其他成员数据":"generate_list.py"}))
-
-
-
-
-rwxr-xr-x. 1 t t 1511 5月 25 10:24 ./cgi-bin/yate.py
-
#从string模块中导入类,支持简单的字符串替换模板.
-
from string import Template
-
-
#生成文件类型
-
def start_response(resp="text/html"):
-
return('Content-type: ' + resp + ';charset=utf-8\n\n')
-
-
#
-
def include_header(the_title):
-
with open('templates/header.html') as headf:
-
head_text = headf.read()
-
header = Template(head_text)
-
return(header.substitute(title=the_title))
-
-
def include_footer(the_links):
-
with open('templates/footer.html') as footf:
-
foot_text = footf.read()
-
link_string = ''
-
for key in the_links:
-
link_string += '+ the_links[key] + '">' + key + ' '
-
footer = Template(foot_text)
-
return(footer.substitute(links=link_string))
-
-
def start_form(the_url, form_type="POST"):
-
return('+ the_url + '" method="' + form_type + '">')
-
-
def end_form(submit_msg="Submit"):
-
return('
-
-
def radio_button(rb_name, rb_value):
-
return('+ rb_name +
-
'" value="' + rb_value + '"> ' + rb_value + '
')
-
-
def u_list(items):
-
u_string = '
-
'
-
for item in items:
- u_string += '
-
' + item + '
'
- u_string += '
-
'
-
return(u_string)
-
-
def header(header_text, header_level=2):
-
return('(header_level) + '>' + header_text +
-
' + str(header_level) + '>')
-
-
def para(para_text):
-
return('
' + para_text + '
')
-
-
-rwxr-xr-x. 1 t t 2086 5月 25 11:30 ./cgi-bin/athletemodel.py
-
#!/usr/bin/evn python3
-
# -*- coding:utf8 -*-
-
'''
-
1.读取文件 => put_to_store => pickle
-
2.pickle => get_from_store => viewer
-
'''
-
import pickle
-
from kelly_c import athletelist
-
#磁盘文件处理
-
def openfile(filename):
-
try:
-
#打开文件
-
with open(filename) as athlete_file:
-
#读取数据
-
data = athlete_file.readline()
-
#初步处理数据,去空,以,号分割
-
value_list= data.strip().split(',')
-
#分别取出有格式的三种数据
-
username = value_list.pop(0)
-
userdob = value_list.pop(0)
-
usertimes= value_list
-
#返回实例对象
-
athlete_instance=athletelist(username,userdob,usertimes)
-
return(athlete_instance)
-
except IOError as ioerr:
-
print('File error %s' % ioerr)
-
return(None)
-
-
#内容压制,使用字典数据类型.
-
def put_to_store(files_list):
-
#字典生成
-
all_athletes = {}
-
for each_file in files_list:
-
each_athlete = openfile(each_file)
-
all_athletes[each_athlete.name] = each_athlete
-
#pickle数据压制
-
try:
-
with open('data/athletes.pickle','wb') as athlfile:
-
pickle.dump(all_athletes,athlfile)
-
except IOError as ioerr:
-
print('File error(%s)' % ioerr)
-
return(all_athletes)
-
-
def get_from_store():
-
all_athletes = {}
-
#pickle数据解压
-
try:
-
with open('data/athletes.pickle','rb') as athlfile:
-
all_athletes=pickle.load(athlfile)
-
except IOError as ioerr:
-
print('File error(%s)' % ioerr)
-
return(all_athletes)
-
-
#files_list = ["../data/james.txt", "../data/julie.txt", "../data/mikey.txt", "../data/sarah.txt"]
-
#data = put_to_store(files_list)
-
#test
-
'''
-
print(get_from_store())
-
print(dir())
-
type(data)
-
print('Use put_to_store()')
-
for each_athlete in data:
-
print(data[each_athlete].name,data[each_athlete].dob)
-
print('Use get_from_store()')
-
data_copy = get_from_store()
-
for each_athlete in data_copy:
-
print(data_copy[each_athlete].name,data_copy[each_athlete].dob)
- '''
-
-rwxrwxr-x. 1 t t 605 5月 25 11:33 ./cgi-bin/kelly_c.py
-
#!/usr/bin/env python3
-
# -*- coding:utf-8 -*-
-
class athletelist(list):
-
def __init__(self, a_name, a_dob=None, a_times=[]):
-
list.__init__([])
-
self.name = a_name
-
self.dob = a_dob
-
self.extend(a_times)
-
@property
-
def top3(self):
-
return(sorted(set([sanitize(t) for t in self]))[0:3])
-
-
#处理字符,转换成m.s格式
-
def sanitize(time_string):
-
if '-' in time_string:
-
splitter = '-'
-
elif ':' in time_string:
-
splitter = ':'
-
else:
-
return time_string
-
(min, sec) = time_string.split(splitter)
- return (min + '.' + sec)
Mikey McManus,2002-2-24,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38,2:40,2.22,2-31
-rw-r--r--. 1 t t 82 7月 25 2010 ./data/julie.txt
Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01,3.02,2:59
-rw-r--r--. 1 t t 80 8月 29 2010 ./data/james.txt
James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16
-rw-r--r--. 1 t t 84 7月 25 2010 ./data/sarah.txt
Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22
[email protected] webapp$ find . -name '*.html' -exec ls -l {} \; -exec cat {} \;