1.简介
当前的资料来源:Head First Python 书籍,资料为:第七章的web开发
注意当前的web中所有的显示为html的py文件
必须要web文件夹中的cgi-bin文件中
,否者不会被解析,这是一个坑!
2.导入下载的webapp包
访问的结果为:
点击timing data访问的url为:http://localhost:8080/cgi-bin/generate_list.py
3.创建一个generate_list.py
1.在当前的cgi-bin文件中添加一个generate_list.py
文件用于显示当前的读取的所有运动员信息
结果如下:
实际代码实现为:
import os
import re # 导入正则包用于匹配
import glob # 导入搜索
print("Content-type: text/html")
print()
print("<meta charset=\"utf-8\">")
print("<b>当前的可以查看的用户列表</b><br>")
data_files = glob.glob("data/*.txt")
# print("<p>{0}</p>".format(data_files))
print("<form action='result.py' method='post'>")
print("<ul style='list-style:none;'>")
for data_file in data_files:
file_name = data_file.split("data\\")[1]
# print("<p>{0}<p>".format(file_name))
print("<li><input type='radio' value='{0}' name='player_name'/><span style='color:green'>{0}</span></li>".format(
file_name, file_name))
print("</ul>")
print("<input type='submit' value='查看'/>")
print("</form>")
1.这里需要写出Content-type: text/html表示这是使用html解析
2.通过glob.glob("data/*.txt"),进行data文件夹中的所有txt文件的搜索
4.创建一个result.py作为点击后显示的页面
结果为:
这里使用Player对象进行处理,位于cgi-bin/player.py
class Player:
def __init__(self, _name=str, _birth=str, _score=[]):
self.name = _name
self.birth = _birth
self.score = _score
def top3(self):
return sorted(set(self.score))[:3]
当前result.py的代码如下:
import os
import cgi # 从请求中获取参数
from player import Player
print("Content-type: text/html")
print()
print("<meta charset=\"utf-8\">")
print("<b>当前运动员的成绩为:</b><br>")
# 获取提交的表单字段
form_data = cgi.FieldStorage()
# print("form submit datas:{0}".format(form_data))
# 获取表单提交的值
player_data_file = "data/{0}".format(form_data.getvalue("player_name"))
# player_data_file = "data/james.txt" # 由于这里是写死的所以需要将其改变为从get方式获取数据
# 读取文件的内容转换为Player类
def read_to_player(file_path=str):
if not os.path.exists(file_path):
print("<p>加载文件: <span style='color:red'> {0} </span> 失败!<input type='button' value='返回' οnclick='history.back()'/> </p>".format(file_path))
return None
else:
try:
player = Player()
with open(player_data_file) as player_data:
data_array = player_data.readline().strip().split(",")
player.name = data_array.pop(0)
player.birth = data_array.pop(0)
player.score = [string_replace(item) for item in data_array]
return player
except Exception as e:
print("<p>出现异常: <span style='color:red'> {0} </span> </p>".format(e))
return None
# 替换字符
def string_replace(string=str):
if "-" in string:
new_str = string.replace("-", ":")
elif "." in string:
new_str = string.replace(".", ":")
else:
new_str = string
return new_str
player = read_to_player(player_data_file);
print("<ul style='list-style:none;'>")
print("<li><span style='color:green'> 当前运动员{0}的前三数据为:{1} </span></li>".format(player.name, player.top3()))
print("</ul>")
print("<input type='button' value='返回' οnclick='history.back()'/>")
1.获取表单提交的参数需要导入cgi模块:import cgi
2.通过cgi.FieldStorage()获取所有表单提交的数据的键值对,通过getValue(key)方式获取指定的值
5.总结
1.使用web开发的时候需要导入不同的模块
2.通过print方式设置当前的解析类型,通过print数据html标签的方式输出html代码
3.注意参数传递的问题
,和参数获取的时候需要使用cgi方式获取指定的参数
以上纯属个人见解,如有问题请联系本人!