Head First Python 7 web开发

简介: t@localhost webapp$ tree . ├── cgi-bin │   ├── athletemodel.py │   ├── generate_list.py │   ├── generate_timing_data.




t@localhost 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


点击(此处)折叠或打开

  1. -rw-r--r--. 1 t t 263 5月 25 10:17 ./simple_httpd.py
  2. #!/usr/bin/env python3
  3. # -*- coding:utf-8 -*-


  4. from http.server import HTTPServer, CGIHTTPRequestHandler

  5. port = 8080

  6. httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
  7. print("Starting simple_httpd on port: " + str(httpd.server_port))
  8. httpd.serve_forever()



  1. -rwxrwxr-x. 1 t t 672 5月 25 10:34 ./cgi-bin/generate_list.py
  2. #!/usr/bin/env python3
  3. # -*- coding:utf-8 -*-

  4. #导入M,V
  5. import athletemodel, yate
  6. #glob 模块可以向操作系统查询一个文件名列表
  7. import glob

  8. #生成一个选择运动员列表html页面
  9. data_files = glob.glob('data/*.txt')
  10. athletes = athletemodel.put_to_store(data_files)

  11. print(yate.start_response())
  12. print(yate.include_header("kelly教练的运动员列表"))

  13. print(yate.start_form("generate_timing_data.py"))
  14. print(yate.para("从列表中选择一个运动员:"))
  15. for each_athlete in athletes:
  16.     print(yate.radio_button("which_athlete",athletes[each_athlete].name))
  17. print(yate.end_form("Select"))


  18. print(yate.include_footer({"Home":"/index.html"}))














  1. -rwxrwxr-x. 1 t t 746 5月 25 11:33 ./cgi-bin/generate_timing_data.py
  2. #!/usr/bin/env python3
  3. # -*- coding:utf-8 -*-

  4. #使用cgi模块处理表单数据
  5. import cgi
  6. #cgi跟踪模块
  7. import cgitb
  8. cgitb.enable()
  9. #将所有表单数据放在一个字典中
  10. form_data = cgi.FieldStorage()
  11. athlete_name = form_data['which_athlete'].value

  12. import athletemodel,yate
  13. #取出pickle数据
  14. athletes = athletemodel.get_from_store()

  15. #生成运动员时间显示页面
  16. print(yate.start_response())
  17. print(yate.include_header("时间数据信息"))
  18. print(yate.header("运动员:" + athlete_name + ", 出生日期:" + athletes[athlete_name].dob + "."))
  19. print(yate.para("最佳三次成绩为:"))
  20. print(yate.u_list(athletes[athlete_name].top3))
  21. print(yate.include_footer({"Home":"/index.html","其他成员数据":"generate_list.py"}))





  1. -rwxr-xr-x. 1 t t 1511 5月 25 10:24 ./cgi-bin/yate.py
  2. #从string模块中导入类,支持简单的字符串替换模板.
  3. from string import Template

  4. #生成文件类型
  5. def start_response(resp="text/html"):
  6.     return('Content-type: ' + resp + ';charset=utf-8\n\n')

  7. #
  8. def include_header(the_title):
  9.     with open('templates/header.html') as headf:
  10.         head_text = headf.read()
  11.     header = Template(head_text)
  12.     return(header.substitute(title=the_title))

  13. def include_footer(the_links):
  14.     with open('templates/footer.html') as footf:
  15.         foot_text = footf.read()
  16.     link_string = ''
  17.     for key in the_links:
  18.         link_string += '+ the_links[key] + '">' + key + '    '
  19.     footer = Template(foot_text)
  20.     return(footer.substitute(links=link_string))

  21. def start_form(the_url, form_type="POST"):
  22.     return('+ the_url + '" method="' + form_type + '">')

  23. def end_form(submit_msg="Submit"):
  24.     return('


    + submit_msg + '">')

  25. def radio_button(rb_name, rb_value):
  26.     return('+ rb_name +
  27.                              '" value="' + rb_value + '"> ' + rb_value + '
    '
    )

  28. def u_list(items):
  29.     u_string = '
    • '
    •     for item in items:
    •         u_string += '
    • ' + item + ' '
    •     u_string += '
    '
  30.     return(u_string)

  31. def header(header_text, header_level=2):
  32.     return('(header_level) + '>' + header_text +
  33.            ' + str(header_level) + '>')

  34. def para(para_text):
  35.     return('

    ' + para_text + '

    ')



  1. -rwxr-xr-x. 1 t t 2086 5月 25 11:30 ./cgi-bin/athletemodel.py
  2. #!/usr/bin/evn python3
  3. # -*- coding:utf8 -*-
  4. '''
  5. 1.读取文件 => put_to_store => pickle
  6. 2.pickle => get_from_store => viewer
  7. '''
  8. import pickle
  9. from kelly_c import athletelist
  10. #磁盘文件处理
  11. def openfile(filename):
  12.     try:
  13.         #打开文件
  14.         with open(filename) as athlete_file:
  15.             #读取数据
  16.             data = athlete_file.readline()
  17.             #初步处理数据,去空,,号分割
  18.             value_list= data.strip().split(',')
  19.             #分别取出有格式的三种数据
  20.             username = value_list.pop(0)
  21.             userdob = value_list.pop(0)
  22.             usertimes= value_list
  23.             #返回实例对象
  24.             athlete_instance=athletelist(username,userdob,usertimes)
  25.             return(athlete_instance)
  26.     except IOError as ioerr:
  27.         print('File error %s' % ioerr)
  28.         return(None)

  29. #内容压制,使用字典数据类型.
  30. def put_to_store(files_list):
  31.     #字典生成
  32.     all_athletes = {}
  33.     for each_file in files_list:
  34.         each_athlete = openfile(each_file)
  35.         all_athletes[each_athlete.name] = each_athlete
  36.     #pickle数据压制
  37.     try:
  38.         with open('data/athletes.pickle','wb') as athlfile:
  39.             pickle.dump(all_athletes,athlfile)
  40.     except IOError as ioerr:
  41.         print('File error(%s)' % ioerr)
  42.     return(all_athletes)

  43. def get_from_store():
  44.     all_athletes = {}
  45.     #pickle数据解压
  46.     try:
  47.         with open('data/athletes.pickle','rb') as athlfile:
  48.             all_athletes=pickle.load(athlfile)
  49.     except IOError as ioerr:
  50.         print('File error(%s)' % ioerr)
  51.     return(all_athletes)

  52. #files_list = ["../data/james.txt", "../data/julie.txt", "../data/mikey.txt", "../data/sarah.txt"]
  53. #data = put_to_store(files_list)
  54. #test
  55. '''
  56. print(get_from_store())
  57. print(dir())
  58. type(data)
  59. print('Use put_to_store()')
  60. for each_athlete in data:
  61.     print(data[each_athlete].name,data[each_athlete].dob)
  62. print('Use get_from_store()')
  63. data_copy = get_from_store()
  64. for each_athlete in data_copy:
  65.     print(data_copy[each_athlete].name,data_copy[each_athlete].dob)
  66. '''





  1. -rwxrwxr-x. 1 t t 605 5月 25 11:33 ./cgi-bin/kelly_c.py
  2. #!/usr/bin/env python3
  3. # -*- coding:utf-8 -*-
  4. class athletelist(list):
  5.     def __init__(self, a_name, a_dob=None, a_times=[]):
  6.         list.__init__([])
  7.         self.name = a_name
  8.         self.dob = a_dob
  9.         self.extend(a_times)
  10.     @property
  11.     def top3(self):
  12.         return(sorted(set([sanitize(t) for t in self]))[0:3])

  13. #处理字符,转换成m.s格式
  14. def sanitize(time_string):
  15.     if '-' in time_string:
  16.         splitter = '-'
  17.     elif ':' in time_string:
  18.         splitter = ':'
  19.     else:
  20.         return time_string
  21.     (min, sec) = time_string.split(splitter)
  22.     return (min + '.' + sec)
-rw-r--r--. 1 t t 84 7月  24 2010 ./data/mikey.txt
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

t@localhost webapp$ find . -name '*.html' -exec ls -l  {} \; -exec cat {} \;   

目录
相关文章
|
1月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
55 7
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1天前
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
打造高效的Web Scraper:Python与Selenium的完美结合
|
4天前
|
人工智能 测试技术 数据处理
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
50 11
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
110 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
8天前
|
API Python
python泛微e9接口开发
通过POST请求向指定IP的API注册设备以获取`secrit`和`spk`。请求需包含`appid`、`loginid`、`pwd`等头信息。响应中包含状态码、消息及`secrit`(注意拼写)、`secret`和`spk`字段。示例代码使用`curl`命令发送请求,成功后返回相关信息。
30 5
|
1月前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
83 15
|
2月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
332 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
1月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
41 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
2月前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
167 5

热门文章

最新文章

  • 1
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    23
  • 2
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    19
  • 3
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    54
  • 4
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    326
  • 5
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 6
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    39
  • 7
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    28
  • 8
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    20
  • 9
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    53
  • 10
    springSecurity学习之springSecurity过滤web请求
    60
  • 推荐镜像

    更多