MyWeb框架:

from wsgiref.simple_server import make_server

def application(environ, start_response):

    print(environ)
start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1> Hello,web! </h1>'] httpd = make_server('',8080,application) print('Serving HTTP on port 8080....') httpd.serve_forever()

MyWeb框架第一次修改:

index1.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <h1>hello mei</h1> </body>
</html>

index2.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello han</h1> </body>
</html>

MyWeb框架第一次修改.py :

from wsgiref.simple_server import make_server

def mei():
f = open("index1.html", "rb")
data = f.read()
return data def han():
f = open("index2.html", "rb")
data = f.read()
return data def application(environ, start_response):
# print(environ) #自动生成一个打的字典 print('path', environ["PATH_INFO"]) # environ字典中
path = environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')]) # 设置发送的文件类型
if path == "/han":
return [han()]
elif path == "/mei":
return [mei()]
else:
return [b''] httpd = make_server('', 8080, application) print('Serving HTTP on port 8080....') httpd.serve_forever()

MyWeb框架第二次修改:

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/login" method="get">
<p>用户名 <input type="text" name="user" id="user"></p>
<p>密码 <input type="text" name="pwd" id="pwd"></p>
<p><input type="submit">提交</p>
</form> </body>
</html>

show_time.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>时间:{{time}}</h1> </body>
</html>

MyWeb框架第二次修改.py:

from wsgiref.simple_server import make_server

import time

def mei(req):
f = open("index1.html", "rb")
data = f.read()
return data def han(req):
f = open("index2.html", "rb")
data = f.read()
return data def login(req):
print(req["QUERY_STRING"])
return b"welcome!" def signup(req):
pass def show_time(req):
times = time.ctime()
return ("<h1> time: %s </h1>" % str(times)).encode("utf8") # 打印时间 #这种方法不建议使用
# f=open("show_time.html","rb")
# data=f.read()
# data=data.decode("utf8")
# data=data.replace("{{time}}",str(times))
# return data.encode("utf8") def router():
url_patterns = [
("/mei", mei),
("/signup", signup),
("/han", han),
("/login", login),
("/show_time", show_time), ]
return url_patterns # 返回字典 def application(environ, start_response):
# print(environ) #自动生成一个打的字典 print('path', environ["PATH_INFO"]) # environ字典中
path = environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')]) # 设置发送的文件类型 url_patterns = router()
func = None
for item in url_patterns:
if item[0] == path: # 先判断是否为path
func = item[1] # 执行其对应方法
break
if func:
return [func(environ)]
else:
return [b""] httpd = make_server('', 8080, application) print('Serving HTTP on port 8080....') httpd.serve_forever()

Python学习第二十七课——写一个和Django框架的自己的框架的更多相关文章

  1. python学习(5)写一个二分算法的程序

    把之前学习的做一个小结.之前看二分查找法,只能是似而非地看懂大概.现在用这么多天的知识积累已经可以自己写了. 而且在算法书的基础上,把需要找的数字做一个人机互动操作. 另外,初步接触到了 __name ...

  2. python学习第二十七天函数的return返回值

    python函数返回值用的return ,函数遇到return 结束函数运行过程,终止程序,不论后面还有多少个输出,都终止本次函数,所有一定要慎重用return 1,函数return用法 def go ...

  3. Python学习第十七课——组合

    组合1 #组合 1 class Hand: pass class Foot: pass class Trunk: pass class Head: pass class Person: def __i ...

  4. JAVA学习第二十七课(多线程(六))- 多生产者多消费者问题(JDK1.5新特性)

    多生产者多消费者问题 以生产馒头 消费馒头为例. class Resource { private String name; private int count = 1; private boolea ...

  5. Python学习第二十三课——Mysql 表记录的一些基本操作 (查)

    查(select * from 表名) 基本语法: select <字段1,字段2,...> from <表名> where <表达式>; 例如,查询student ...

  6. Python学习第二十一课——Mysql 对数据库的基本操作

    数据库操作(DDL) 在数据库下创建表(create_table) 创建表代码块: CREATE TABLE employee( id TINYINT PRIMARY KEY auto_increme ...

  7. Python学习第二十课——自定property and classmethod

    自定制property class Lazyproperty: def __init__(self,func): # print('==========>',func) self.func=fu ...

  8. 风炫安全WEB安全学习第二十七节课 XSS的防御措施

    风炫安全WEB安全学习第二十七节课 XSS的防御措施 XSS防御措施 总的原则 控制好输入/输出 过滤:根据业务需求进行过滤,对email,手机号码这样的输入框进行验证. 转义:所有输出到前端的数据都 ...

  9. NeHe OpenGL教程 第二十七课:影子

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. linux下删除空行的几种方法

    在查看linux下的配置文件时,为了便于一目了然的查看,经常会删除空行和#头的行.而linux在删除空行的方法很多,grep.sed.awk.tr等工具都能实现.现总结如下: 1.grep grep ...

  2. android .9背景图作为TextView背景时文字无法居中问题

    问题产生原因: .9图黑色边框绘制伸缩区域有问题,重叠的最大区域是TextView文字所能显示的区域 如下图所示,横向和纵向最大重叠部分就是文字可显示部分,这个图作为背景后文字整体偏下,无法上下居中对 ...

  3. 计算几何-Graham法-凸包

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 关键一句话 Cr ...

  4. 1.学习一下Angularjs的promisee

    1.首先来了解一下promisee: 在谈论Promise之前我们要了解一下一些额外的知识:我们知道JavaScript语言的执行环境是“单线程”,所谓单线程,就是一次只能够执行一个任务,如果有多个任 ...

  5. leetcode 25. K 个一组翻转链表

    # coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...

  6. Go_random

    package main import ( "math/rand" "fmt" "time" ) func main() { /* 生成随机 ...

  7. P & R 11

    要做好floorplan需要掌握哪些知识跟技能? 首先熟悉data flow对摆floorplan 有好处,对于减少chip的congestion 是有帮助的,但是也不是必需的,尤其是EDA工具快速发 ...

  8. .NET基础拾遗(1)类型语法基础和内存管理基础【转】

    http://www.cnblogs.com/edisonchou/p/4787775.html Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串 ...

  9. 如何用 Python 实现超级玛丽的人物行走和碰撞检测?

    ​ 功能介绍 人物行走 人物的行走速度这边分成水平方向(X轴)和竖直方向(Y轴),水平方向的速度要考虑加速度和摩擦力,竖直方向的速度要考虑重力加速度. 水平方向:设定X轴向右走的速度为大于0,向左走的 ...

  10. 《实战Java高并发程序设计》读书笔记三

    第三章 JDK并发包 1.同步控制 重入锁:重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,这种锁可以反复使用所以叫重入锁. 重入锁和synchro ...