Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将处理程序注入自定义BaseHTTPRequestHandler实例?_Python_Python 3.x - Fatal编程技术网

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

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派生并创建负责

以下是有关如何创建自定义web服务器的链接:

基本上

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,所以我可能会错过一些明显的东西(我也希望避免硬编码流程行为,因为我以后可能还需要一些上下文(像其他实例一样))