Python学习第二十七课——写一个和Django框架的自己的框架
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框架的自己的框架的更多相关文章
- python学习(5)写一个二分算法的程序
把之前学习的做一个小结.之前看二分查找法,只能是似而非地看懂大概.现在用这么多天的知识积累已经可以自己写了. 而且在算法书的基础上,把需要找的数字做一个人机互动操作. 另外,初步接触到了 __name ...
- python学习第二十七天函数的return返回值
python函数返回值用的return ,函数遇到return 结束函数运行过程,终止程序,不论后面还有多少个输出,都终止本次函数,所有一定要慎重用return 1,函数return用法 def go ...
- Python学习第十七课——组合
组合1 #组合 1 class Hand: pass class Foot: pass class Trunk: pass class Head: pass class Person: def __i ...
- JAVA学习第二十七课(多线程(六))- 多生产者多消费者问题(JDK1.5新特性)
多生产者多消费者问题 以生产馒头 消费馒头为例. class Resource { private String name; private int count = 1; private boolea ...
- Python学习第二十三课——Mysql 表记录的一些基本操作 (查)
查(select * from 表名) 基本语法: select <字段1,字段2,...> from <表名> where <表达式>; 例如,查询student ...
- Python学习第二十一课——Mysql 对数据库的基本操作
数据库操作(DDL) 在数据库下创建表(create_table) 创建表代码块: CREATE TABLE employee( id TINYINT PRIMARY KEY auto_increme ...
- Python学习第二十课——自定property and classmethod
自定制property class Lazyproperty: def __init__(self,func): # print('==========>',func) self.func=fu ...
- 风炫安全WEB安全学习第二十七节课 XSS的防御措施
风炫安全WEB安全学习第二十七节课 XSS的防御措施 XSS防御措施 总的原则 控制好输入/输出 过滤:根据业务需求进行过滤,对email,手机号码这样的输入框进行验证. 转义:所有输出到前端的数据都 ...
- NeHe OpenGL教程 第二十七课:影子
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- 每天进步一点点------Allegro 蛇形走线
对于高速数据总线,如果芯片内部没有延时调节功能,通常使用蛇形走线来调整延时以满足时序要求,也就是通常所说的等长线.蛇形走线的目的是调整延时,所以这一类网络都有延迟或相对延迟约束.所以在做蛇形走线调整时 ...
- Tomcat配置过程
Tomcat的配置其实还是挺简单的,下面是在Myeclipse中配置 1.首先要在Tomcat官网下载,网址:http://tomcat.apache.org/,然后左侧会有Download,选择你要 ...
- 【游记】CSP-J2019谔谔记
结果果然不能把希望寄托在渺茫的玄学上,实力不够还是不要渴求什么奇迹了. ----2020.2.21记 Day -6 考场就在我市,所以东道主应该运气会好一点吧. Day -1 听说本来准备上的中学准备 ...
- shiro登录认证过程讲解
先粘出登录的代码 1. 可以看到已经获取到了username和password ,为了接下来的认证过程,我们需要获取subject对象,也就是代表当前登录用户,并且要将username和passw ...
- Linux之Socket编程
1.什么是Socket? socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...
- opencv:边缘保留滤波
EPF滤波概述 均值与滤波的缺点:并没有考虑中心像素点对整个输出像素的贡献,实际上锚定的那个点贡献应该是最大的 高斯滤波的缺点:当边缘值梯度很大的时候,应减少中心像素点的权重,而高斯滤波没有考虑 边缘 ...
- 把jar包部署为linux服务
一直未配置成功,直到放弃后reboot了下,才直到错的不是自己的配置,而是自己不懂 1.在touch /etc/rc.d/init.d/tl_c_cons_service(创建新文件) 2.vi /e ...
- 关于反射中如何剔除实体类中serialVersionUID字段
Field[] fields = t.getClass().getDeclaredFields(); //这里为了剔除serialVersionUID Field[] tempArr = new Fi ...
- Spring-Aop编程(三)-AspectJ
AspectJ 1. 介绍 AspectJ是一个基于Java语言的AOP框架,Spring2.0以后新增了对AspectJ切点表达式支持,@AspectJ 是AspectJ1.5新增功能,通过JDK5 ...
- html 打印相关操作与实现
2020-02-19 | chrome 79.0.3945.130 测试无问题 未做兼容测试 原理为调用 window.print() 方法,但是该方法只能对当前页面全部打印,所以有了以下方案来解决局 ...