web框架的优化
web框架的一个重要的特点就是更具浏览器端不同的请求执行不同的函数。
今天实现这个功能。 思路流程:
socket通信-->解析url-->更具url匹配对应的函数-->响应
import socket
# 解析url
def geturl(data):
line1 = str(data).split('\r\n')[0]
url = line1.split(' ')[1]
while '/' in url:
url = url.replace('/','')
return url
#相应函数
def liubei(url):
ret = url + ' hello!'
return bytes(ret, encoding='utf-8')
def guanyu(url):
ret = url + ' hello!!'
return bytes(ret, encoding='utf-8')
def zhangfei(url):
ret = url + ' hello!!!'
return bytes(ret, encoding='utf-8')
def error_url(url):
return bytes('not find', encoding='utf-8')
#函数列表
fun_list = [
{'liubei': liubei},
{'guanyu': guanyu},
{'zhangfei': zhangfei}
]
#启动服务器
def start_server():
sk = socket.socket()
ip = '127.0.0.1'
port = 8000
sk.bind((ip, port))
sk.listen()
while True:
conn, _ = sk.accept()
data = conn.recv(8192)
print(data)
url = geturl(data)
print(url)
fun_active = None
for fun in fun_list:
if url == tuple(fun.keys())[0]:
fun_active = tuple(fun.values())[0]
break
else:
fun_active = error_url
send_data = fun_active(url)
conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
conn.send(send_data)
conn.close()
sk.close()
#测试代码
if __name__ == '__main__':
start_server()
代码中包含的python的基础知识
1.replace函数不会改变源字符串,而是返回一个替换后新的字符串。
while '/' in url:
url = url.replace('/','')
2.字典到列表的操作:
tuple(dict.keys()) 会返回一个包含所有字典key值得列表。
tuple(dict.values())会返回一个包含所有字典value值得列表。
for fun in fun_list:
if url == tuple(fun.keys())[0]:
fun_active = tuple(fun.values())[0]
break