python - 如何将参数传递给 Python 中 BaseHTTPRequestHandler 类的 GET-handler 方法
问题描述
我有一个用 Python 创建的 HTTP 服务器
from http.server import BaseHTTPRequestHandler, HTTPServer
import bson.json_util
import json
server = HTTPServer((ip, port), GetHandler)
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
在哪里GetHandler
class GetHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
def do_GET(self):
json_string = json.dumps({"message" : "Hello"}, default=bson.json_util.default)+"\n"
self._set_headers()
self.wfile.write(json_string.encode())#encoding='UTF-8'
return
假设我想从该行将一个变量传递给do_GET
类的方法:我该怎么做?GetHandler
server = HTTPServer((ip, port), GetHandler)
编辑
就像示例一样,假设我my_str
在该行之前定义了一个字符串,server = HTTPServer((ip, port), GetHandler)
并且我想将此字符串用作响应消息。
解决方案
在 Python 中,您实际上可以在函数中创建类。然后这些类将通过闭包访问函数的局部变量。
以下代码定义了该函数make_handler
,该函数在调用时定义了一个新的“处理程序”类,其值在myvariable
整个类中可用:
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
def make_handler(myvariable):
class GetHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
def do_GET(self):
self._set_headers()
self.wfile.write(myvariable.encode('utf8'))
return
return GetHandler
server = HTTPServer(('127.0.0.1', 50002), make_handler('my_str'))
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
推荐阅读
- ios - 运行 pod install 后 Development Pod 文件消失?
- mercurial - hgsubversion 失败并显示“没有名为 repo 的模块”
- javascript - multer:使用返回未定义的 node.js 将 Excel 文件上传到数据库
- mysql - 在简单的 SQL 查询中可能没有正确使用索引
- python - 如何在 python 中显示我的图像?
- java - 如何使用 JSOUP 获取第一个链接?
- r - 字典满了!使用 dplyr 的错误消息
- keyboard - 在 Andorid 11 中替换 WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
- python - 初学者。只是找不到错误。python导出到CSV
- kubernetes - 如何让 traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip 工作?