轻量级前端框架助力开发者提升项目效率与性能
643
2022-10-11
不到100行写出一个完整的web框架
本篇文章是为了后面的Django做准备的,这是学习web框架的底层知识,没有直接用到socket,而是用Python自带的库wsgiref。1、wsgiref模块 它就相当于是一个服务器,会帮我们做解析,内部已经封装好了socket等多项功能。
2、框架主要分为五部分1)导入模块
from wsgiref.simple_server import
2)自定义处理函数
def foo1(req): f=open("index1.html","rb") # 读取文件 data=f.read() return
3)路由分发函数 即分发其他函数的一个函数,所有的要实现的功能都可以放在这里面传输到服务器,这样每一个路径都可以对应一个函数。
def router(): url_patterns=[ ("/login",login), ("/register",register), ("/Viewin", foo1), ("/Zoro", foo2), ("/show_time",show_time), ] return
4)应用函数 框架本体,可以直接套用。一但有端口连接进入后,就会运行application函数,environ是wsgiref服务器处理传入的请求信息,是一个大字典,取值用键值对来取。
def application(environ, start_response): # 在application函数内,则需要作出响应操作 #通过environ来取路径上输入的值 print("path",environ["PATH_INFO"]) path= environ["PATH_INFO"] # start_response设置响应头:状态码为200,状态码解析是OK,文本内容,文本格式... start_response('200 OK', [('Content-Type', 'text/html')]) # return返回响应体 return [b"
5)创建链接并监听HTTP请求 参数:IP地址,端口,应用函数 注意:这里的IP地址会默认获取本机的IP地址
# 创建链接= make_server('', 8080, application)# 开始监听HTTP请求:1)show_time
2)login
3)index1
4)index2
4、参考效果
5、完整web框架
# 导入wsgiref模块(不会直接使用socket),# 它相当于是一个服务器,会帮我们做解析,内部已经封装好了socket等多项功能from wsgiref.simple_server import make_serverimport time# 自定义处理函数def foo1(req): f=open("index1.html","rb") # 读取文件 data=f.read() return datadef foo2(req): f = open("index2.html", "rb") # 读取文件 data = f.read() return datadef login(req): # print(req) #找到user和pwd所在的大的键为QUERY_STRING print(req["QUERY_STRING"]) return b"Welcome to my web!"def register(req): passdef show_time(req): times=time.ctime() # 获取时间的字符串 f= open("show_time.html","rb") data= f.read().decode("utf8") # 自定义语法{{}},来找到我们需要的时间 # 用变量times(准确的时间)去替换页面内的time data= data.replace("{{time}}",str(times)) # 此处替换后的内容是字符串,因此需要转码一下 return data.encode("utf8")# 路由分发的函数:即分发其他函数的一个函数,所有的要实现的功能都可以放在这里面传输到服务器# 这样每一个路径都可以对应一个函数def router(): url_patterns=[ ("/login",login), ("/register",register), ("/Viewin", foo1), ("/Zoro", foo2), ("/show_time",show_time), ] return url_patterns# 应用函数:一但有端口连接进入后,就会运行application函数# environ是wsgiref服务器处理传入的请求信息,是一个大字典,取值用键值对来取def application(environ, start_response): # 在application函数内,则需要作出响应操作 #通过environ来取路径上输入的值 print("path",environ["PATH_INFO"]) path= environ["PATH_INFO"] # start_response设置响应头:状态码为200,状态码解析是OK,文本内容,文本格式... start_response('200 OK', [('Content-Type', 'text/html')]) ''' if path=="/Viewin": return[foo1()] # return[b"
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~