类实现wsgi app
from wsgiref.util import setup_testing_defaults from wsgiref.simple_server import make_server class Simple_App: def __init__(self,environ,start_response): self.environ = environ self.start_response =start_response status = '200 ok' headers = [('Content-type','text/plain;charset=utf-8')] self.start_response(status,headers) self.ret = ['{}'.format(v).encode() for k,v in self.environ.items()] def __iter__(self): yield from self.ret with make_server('0.0.0.0',9000,Simple_App) as httpd: httpd.serve_forever()
函数实现wsgi,app的方法
from wsgiref.simple_server import make_server def simple_app(environ, start_response): status = '200 OK' headers = [('Content-type', 'text/plain; charset=utf-8')] qstr = environ.get('QUERY_STRING') # if qstr: # for pair in qstr.split('&'): # k,_,v = pair.partition("=") # print('k={},v={}'.format(k,v)) if qstr: querydict={k:v for k,_,v in map(lambda x:x.partition("="),qstr.split("&"))} print(querydict) start_response(status, headers) ret = [("%s: %s\n" % (key, value)).encode("utf-8") for key, value in environ.items()] return ret #返回一个可迭代对象,正文就是这个列表的元素 with make_server('', 8000, simple_app) as httpd: print("Serving on port 8000...") print("11111111111") httpd.serve_forever()
理解webob的Request,Response
from webob import Request,Response from wsgiref.simple_server import make_server def simple_server(environ,start_response): request = Request(environ) print(request.params) response = Response() response.body = b'<h1>hello world<\h1>' return response(environ,start_response) with make_server('0.0.0.0',9999,simple_server) as httpd: httpd.serve_forever()
wsgify装饰器的实现
from webob import Request,Response from wsgiref.simple_server import make_server from webob.dec import wsgify @wsgify def app(request:Request)->Response: #一个请求对应一个响应 return Response('<h1>welcome to China</h1>') # return Response(b'<h2>welcome to China 2 </h2>') # return b'<h3>welcome to China 3</h3>' with make_server('0.0.0.0',9999,app) as httpd: print('success') httpd.serve_forever()