写一个Python 1、通过select实现的最简单的web框架2、通过wsgiref实现的web框架

2023-06-09,,

 #!/usr/bin/env python
# -*- coding: utf- -*- import socket
import select class MyRequest:
"""
从请求头请求体获取的信息封装的request对象中
"""
def __init__(self,data):
header_body=data.decode('utf-8')
header_str,body_str=header_body.split('\r\n\r\n')
header_list=header_str.split('\r\n')
method,url,protocal=header_list[].split(' ') header_dict={} for i in range(,len(header_list)):
k,v =header_list[i].split(':',)
header_dict[k]=v self.method=method
self.url=url
self.headers=header_dict class MyResponse:
"""
处理服务端要返回给浏览器的数据,相当于HTTPResponse或render
"""
def __init__(self,data):
self.data=data
self.base_data='HTTP/1.1 200 OK\r\n\r\n<html><head><meta charset="UTF-8"></head><body><h1>{0}</h1></body></html>'
def myrender(self):
return self.base_data.format(self.data).encode('utf-8') # 下面2个简单的视图函数
def index(request):
return MyResponse('index page').myrender() def login(request):
return MyResponse('login page').myrender() # 路由系统
routers=[
['/index',index],
['/login',login],
] sk=socket.socket()
sk.setblocking(False)
sk.bind(('127.0.0.1',))
sk.listen() inputs=[sk,] # 套接字接听对象,是socket或conn的一个或多个 while True:
rList,wList,eList=select.select(inputs,[],[],)
# 读,写,错误 3个列表
for server in rList:
if server==sk:
conn,addr=sk.accept()
inputs.append(conn)
else:
header_body_bytes=server.recv()
request=MyRequest(header_body_bytes)
view_method=None
for view_function in routers:
# 根据请求url通过路由交给不同的视乎函数处理
if request.url == view_function[]:
view_method=view_function[]
break
if not view_method:
response=MyResponse('').myrender()
else:
response=view_method(request)
server.sendall(response)
inputs.remove(server)
server.close()
#!/usr/bin/env python
# -*- coding: utf-8 -*- from wsgiref.simple_server import make_server # 下面2个视图函数
def indexfunc(request):
f=open(r'templates/index.html','rb')
data=f.read()
f.close()
print('执行了indexfunc')
return [data] def loginfunc(request):
request_method=request.get('REQUEST_METHOD')
if request_method=='GET':
f = open(r'templates/login.html', 'rb')
data = f.read()
f.close()
print('执行了login')
return [data] # 路由
routers=[
('/index',indexfunc),
('/login',loginfunc),
] drouters=dict(routers) def application(environ,start_response):
start_response('200 ok',[('Content-Type','text/html')])
path=environ.get('PATH_INFO')
print(path)
if drouters.get(path):
print('yeah')
return drouters.get(path)(environ)
else: return [b'<h1>404<h1>'] t=make_server('127.0.0.1',8989,application)
t.serve_forever()

  

写一个Python 1、通过select实现的最简单的web框架2、通过wsgiref实现的web框架的相关教程结束。

《写一个Python 1、通过select实现的最简单的web框架2、通过wsgiref实现的web框架.doc》

下载本文的Word格式文档,以方便收藏与打印。