以下是有关如何创建自定义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所以我可能会错过这里明显的东西(也想避免硬编码过程行为,因为我以后可能还需要一些上下文(像其他实例一样))