DriveHandler仅修改POST后GET请求返回空白的技术咨询
Gramex DriveHandler GET请求返回空白问题咨询
我们按照帮助文档配置DriveHandler,配置内容如下:
url: drivehandler: pattern: /$YAMLURL/drive handler: DriveHandler kwargs: path: $YAMLURL/drive modify: mymodule.modify(handler)
同时创建了mymodule.py,代码如下:
def modify(): if handler.request.method.upper() == "POST": import pandas as pd data = [] for d in pd.DataFrame(handler.files).itertuples(): print("preprocesed data", d)
以默认端口启动Gramex服务后,POST请求可正常工作,控制台能看到打印输出;但发起GET请求访问localhost:9988/drive时,尽管drive/.meta.db已生成内容,页面却始终返回空白。特此咨询:仅修改POST请求的处理逻辑时,是否必须为GET请求编写自定义处理逻辑?
问题原因与解决方案
问题出在你的modify函数上:Gramex的modify参数会接管所有请求的处理流程,不管是POST还是GET,都会先经过这个函数。你的代码只处理了POST请求的逻辑,完全没有处理GET请求的响应返回,所以GET请求没有输出任何内容,页面自然空白。
不需要为GET请求编写完整的自定义处理逻辑,只要在modify函数中为非POST请求保留原DriveHandler的默认处理逻辑即可。另外注意:你原来的modify函数没有接收handler参数,但配置里写的是mymodule.modify(handler),这会导致运行报错,必须修正参数传递问题。
修正后的mymodule.py代码如下:
def modify(handler): if handler.request.method.upper() == "POST": import pandas as pd data = [] for d in pd.DataFrame(handler.files).itertuples(): print("preprocessed data", d) # 对于GET请求,调用原DriveHandler的默认处理逻辑返回页面内容 else: return handler.get()
这样修改后,POST请求会执行你的自定义处理逻辑,GET请求则沿用DriveHandler的默认展示逻辑,页面就能正常显示drive目录下的内容了。
内容的提问来源于stack exchange,提问作者shraddheya shrivastava
相关产品推荐
相关产品推荐

