1
from tornado.httpserver import HTTPServer from tornado.httputil import HTTPServerConnectionDelegate, HTTPMessageDelegate, ResponseStartLine, HTTPHeaders from tornado.routing import RuleRouter, Rule, PathMatches from tornado.web import RequestHandler, Application from tornado.ioloop import IOLoop ‘‘‘ RuleRouter([Rule的实例1,Rule的实例2]) ‘‘‘ ‘‘‘ 第一种 Rule(Matcher,HTTPServerConnectionDelegate) ‘‘‘ class MessageDelegate(HTTPMessageDelegate): def __init__(self, connection): self.connection = connection def finish(self): self.connection.write_headers( ResponseStartLine("HTTP/1.1", 200, "OK"), # HTTP响应的状态行 HTTPHeaders({"Content-Length": "2", "k": ‘V‘}), # Response Headers 响应头部 b"OK") # 响应body self.connection.finish() class ConnectionDelegate(HTTPServerConnectionDelegate): def start_request(self, server_conn, request_conn): print(server_conn, request_conn) return MessageDelegate(request_conn) router = RuleRouter([ Rule(PathMatches("/handler"), ConnectionDelegate()), # ... more rules ]) if __name__ == ‘__main__‘: server = HTTPServer(router) server.listen(8888) IOLoop.current().start()
from tornado.httpserver import HTTPServer from tornado.httputil import HTTPServerConnectionDelegate, HTTPMessageDelegate, ResponseStartLine, HTTPHeaders, HTTPServerRequest from tornado.routing import RuleRouter, Rule, PathMatches, Router from tornado.web import RequestHandler, Application from tornado.ioloop import IOLoop import tornado.template ‘‘‘ RuleRouter([Rule的实例1,Rule的实例2]) ‘‘‘ ‘‘‘ 第二种 Rule(Matcher,Router实例) Router实例本质还是提供一个 HTTPMessageDelegate去处理 ‘‘‘ class MessageDelegate(HTTPMessageDelegate): def __init__(self, connection): self.connection = connection def finish(self): self.connection.write_headers( ResponseStartLine("HTTP/1.1", 200, "OK"), HTTPHeaders({"Content-Length": "2"}), b"OK") self.connection.finish() class CustomRouter(Router): def find_handler(self, request, **kwargs): # some routing logic providing a suitable HTTPMessageDelegate instance print(type(request)) # HTTPServerRequest print(request.connection) return MessageDelegate(request.connection) router = RuleRouter([ Rule(PathMatches("/router.*"), CustomRouter()) ]) if __name__ == ‘__main__‘: server = HTTPServer(router) server.listen(8888) IOLoop.current().start()
路由分发APP
from tornado.httpserver import HTTPServer from tornado.routing import RuleRouter, Rule, PathMatches, Router from tornado.web import RequestHandler, Application from tornado.ioloop import IOLoop class Handler1(RequestHandler): def get(self): self.write(‘1‘) class Handler2(RequestHandler): def get(self): self.write(‘2‘) app1 = Application([ (r"/app1/handler", Handler1), # other handlers ... ]) app2 = Application([ (r"/app2/handler", Handler2), # other handlers ... ]) router = RuleRouter([ Rule(PathMatches("/app1.*"), app1), Rule(PathMatches("/app2.*"), app2) ]) if __name__ == ‘__main__‘: server = HTTPServer(router) server.listen(8888) IOLoop.current().start()
根据域名匹配
from tornado.httpserver import HTTPServer from tornado.routing import RuleRouter, Rule, PathMatches, Router, HostMatches from tornado.web import RequestHandler, Application from tornado.ioloop import IOLoop class Handler1(RequestHandler): def get(self): self.write(‘1‘) router = RuleRouter([ Rule(HostMatches(‘monitor.com‘), RuleRouter([Rule(PathMatches(‘/app1.*‘), Application([(r‘/app1/handler1‘, Handler1)]))])), Rule(HostMatches(‘test.monitor.com‘), RuleRouter([Rule(PathMatches(‘/app1.*‘), Application([(r‘/app1/handler1‘, Handler1)]))])), ]) if __name__ == ‘__main__‘: server = HTTPServer(router) server.listen(8888) IOLoop.current().start()
原文地址:https://www.cnblogs.com/liuer-mihou/p/11963639.html
时间: 2024-10-08 02:34:22