Python记录wsgi

类实现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()

猜你喜欢

转载自www.cnblogs.com/harden13/p/9232328.html