如何将处理程序注入自定义BaseHTTPRequestHandler实例?

时间:2017-09-23 14:12:54

标签: python python-3.x

以下是有关如何创建自定义Web服务器的链接: https://docs.python.org/3.2/library/http.server.html

基本上

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 )

我显然无法做到这一点,因为你只将一个类型传递到服务器,并且在每个基础服务器的finish_request上创建它:

def finish_request(self, request, client_address):
    """Finish one request by instantiating RequestHandlerClass."""
    self.RequestHandlerClass(request, client_address, self)

传递内容的唯一方法是实际派生自HTTPServer并覆盖finish_request吗?因为我无法进一步使用处理程序(self.RequestHandlerClass)。

我是一个python noob所以我可能会错过这里明显的东西(也想避免硬编码过程行为,因为我以后可能还需要一些上下文(像其他实例一样))

0 个答案:

没有答案