我希望能够在方法本身之前捕获CherryPy应用程序的方法的参数。但我不确定是否有办法在CherryPy或标准python中执行此操作。看起来应该是这样的:
HTTP请求 - >解析参数的解析器 - >将请求传递给方法
的CherryPy我的目标是捕获输入和输出到服务器而不会干扰方法本身的代码。
另外,如何将请求重定向到CherryPy服务器到其他CherryPy服务器?
答案 0 :(得分:3)
以下是我检查服务器生成的有效csrf令牌的post方法的方法。
def check_token(self=None):
# whenever a user posts a form we verify that the csrf token is valid.
if cherrypy.request.method == 'POST':
token = cherrypy.session.get('_csrf_token')
if token is None or cherrypy.request.params.get('csrf_token') == None or token != cherrypy.request.params['csrf_token']:
raise cherrypy.HTTPError(403)
cherrypy.tools.Functions = cherrypy.Tool('before_handler', check_token)
希望这有帮助!
答案 1 :(得分:1)
处理HTTP请求的标准Python方式是WSGI。 WSGI允许堆叠称为WSGI中间件的处理组件。这是您可以在请求到达框架内部之前修改请求的地方。 CherryPy与WSGI兼容,因此中间件可以与它一起使用。
但是,CherryPy不仅仅是一个框架,它还是一个Web服务器。如果您将其用作服务器,则很可能是cherrypy.quickstart()
电话。要添加中间件,需要更多编码来构建生成WSGI应用程序的站点“树”并将应用程序连接到CherryPyWSGIServer
类。 This article似乎很好地解释了它。但是,我通常建议使用uWSGI来运行Python WSGI应用程序而不是CherryPy的内置服务器。它具有大量功能并克服了GIL问题。
此外,您可以使用页面处理程序/工具在实际处理之前处理请求。请参阅docs。