Python3:第一个Python的Web程序

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方式获取指定的参数

以上纯属个人见解,如有问题请联系本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/103109670