Python 如何将处理程序注入自定义BaseHTTPRequestHandler实例?
以下是有关如何创建自定义web服务器的链接: 基本上Python 如何将处理程序注入自定义BaseHTTPRequestHandler实例?,python,python-3.x,Python,Python 3.x,以下是有关如何创建自定义web服务器的链接: 基本上 def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler): server_address = ('', 8000) httpd = server_class(server_address, handler_class) httpd.serve_forever() 没问题,我从BaseHTTPRequestHandler派生并创建负责
def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
httpd.serve_forever()
没问题,我从BaseHTTPRequestHandler
派生并创建负责正确http回复的自定义http请求处理程序
但是,向请求处理程序中实际注入行为的最佳方式是什么?处理程序本身应该知道如何格式化给定的回复(例如html、xml、json等),但实际上不应该知道如何处理请求本身
通常我会这样做
handler = MyRequestHandler()
handler.processor = SomeProcessor() # or ctor injection etc
run(HTTPServer, handler )
这显然是我无法做到的,因为您只将一个类型传递到服务器,并且在BaseServer的每个finish_请求中创建它:
def finish_request(self, request, client_address):
"""Finish one request by instantiating RequestHandlerClass."""
self.RequestHandlerClass(request, client_address, self)
是传递从HTTPServer派生的内容并重写请求的唯一方法吗?因为我找不到进一步使用该处理程序(self.RequestHandlerClass
)
我是一个PythonNoob,所以我可能会错过一些明显的东西(我也希望避免硬编码流程行为,因为我以后可能还需要一些上下文(像其他实例一样))