迷你web框架 面向对象-动态解析服务器

服务器:
import socket import re import multiprocessing import delme import sys class WSGI(): def __init__(self,port): self.conn = socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.conn.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) self.conn.bind(("",port)) self.conn.listen(128) def server_client(self,new_socket): request = new_socket.recv(1024).decode("utf-8") print("********",request) request_lines = request.splitlines() contents = re.match(r"[^/]*(/[^ ]*)",request_lines[0]) if contents: file_name = contents.group(1) print("-------group",file_name) if file_name == "/": file_name = "/index.html" if not file_name.endswith(".py"): try: response = open("./html" + file_name, "rb") except: response = "HTTP/ 1.1 404 NOT FOUND\r\n" response += "\r\n" response += "page not found.." new_socket.send(response.encode('utf-8')) else: new_response = response.read() response.close() head = "HTTP/ 1.1 200 OK\r\n" head += "\r\n" new_socket.send(head.encode("utf-8")) new_socket.send(new_response) else: dic =dict() dic["path_info"] = file_name temp = delme.application(dic,self.set_respons_header) head = "HTTP/ 1.1 %s\r\n" % self.stauts for i in self.type: head += "%s:%s\r\n" % (i[0],i[1]) head += "\r\n" res = head + temp new_socket.send(res.encode("utf-8")) new_socket.close() def set_respons_header(self,stauts,ty): self.stauts = stauts self.type = ty def run(self): while True: new_socket,addr = self.conn.accept() p = multiprocessing.Process(target=self.server_client,args=(new_socket,)) p.start() new_socket.close() def main(): if len(sys.argv) == 2: try: port = int(sys.argv[1]) except: print("prot is not right") return else: print("format no right") return server = WSGI(port) server.run() if __name__ == '__main__': main()
web框架:
def login(): return "this is login" def index(): with open("./html/index.html") as f: return f.read() def application(evn,func): func("200 OK",[('Content-Type','text/html;charset=utf-8'),]) print("--------",evn,"----------") if evn["path_info"] == "/index.py": return index() elif evn["path_info"] == "/login.py": return login() else: return 'hello world...'
web框架改进,用装饰器加路由:
ROU_DIC = dict() def router(url): def set_func(func): ROU_DIC[url] = func def call_func(): return func() return call_func return set_func @router('/login.py') def login(): return "this is login" @router("/index.py") def index(): with open("./html/index.html") as f: return f.read() def application(evn,func): func("200 OK",[('Content-Type','text/html;charset=utf-8'),]) print("--------",evn,"----------") # if evn["path_info"] == "/index.py": # return index() # elif evn["path_info"] == "/login.py": # return login() # else: # return 'hello world...' a = evn["path_info"] print("---8888888888------",a) return ROU_DIC[a]()

浙公网安备 33010602011771号