纯手写web框架

 

 

纯手写web框架

 

.py



#你可以将web框架理解成服务端
import socket

server=socket.socket() #TCP 三次握手 osi七层
server.bind(('127.0.0.1',8081)) #IP协议 以太网协议 arp协议
server.listen(5) #池。。。

while True:
conn,addr=server.accept()#等待监听
data=conn.recv(1024)
print(data)
#回了两次,直接忽略favicon.ico
data=data.decode('utf-8') #将二进制转为字符串
conn.send(b'HTTP/1.1 200 OK\r\n\r\n') #遵循http协议
current_path=data.split(' ')[1] #想拿到路径,根据空格进行切分取索引[1]的位置就是路径
# print(current_path)
if current_path=='/index': #不同路径发送不同效果
# conn.send(b'index heiheihei')
with open(r'01 myhtml.html','rb')as f:
conn.send(f.read())
elif current_path=='/login':
conn.send(b'login')
else:
conn.send(b'hello web')
conn.close() #关闭

 

 

将二进制转为字符串:

data=date.decode('utf-8')

 

 

myhtml.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>你好呀 齐老师^V^ </h1>
</body>
</html>

 

 

 

基于wsgiref模块:

import wsgiref

def run(env,response):
    """

    :param env:是请求相关的所有数据
    :param response:响应相关的所有数据
    :return:返回给浏览器的数据
    """
    print(env) #大字典 wsgiref模块帮你处理好了http的格式
    #从env中取值
    current_path=env.get('PATH_INFO')#拿到当前用户输入的对象路径
    if current_path=='/index':
        return [b'index']
    elif current_path=='/login':
        return [b'login']
    return [b'404 error']
    response('200 OK',[])#响应首行响应头
    return[b'hello wsgiref']




if __name__=='__main__':
    server=make_server('127.0.0.1',8080,run)
    """
    会实时监听127.0.0.1:8080地址,只要有客户来了
    都会交给run函数处理(加括号出发run函数的执行)
    
    flask启动代码
    make_server('127.0.0.1,8080,obj)
    __call__对象加()会执行它的call方法
    """
    server.server_forever()

 

posted @ 2024-03-15 00:51  朱饱饱  阅读(19)  评论(0)    收藏  举报