1

I want to be able to catch the arguments of the methods of my CherryPy application before the method itself. But I'm not sure if there is a way to do it in CherryPy or with standard python. It should look something like this:

HTTP Request --> Parser to catch the arguments --> CherryPy who passes the request to method

My goal is to capture the input and output to a server without disturbing the code in the method itself.

Also, how can you redirect the request to a CherryPy server to other CherryPy servers?

4

2 回答 2

3

以下是我如何检查我们的服务器生成的有效 csrf 令牌的发布方法。

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)

希望这可以帮助!

于 2013-11-12T13:49:44.937 回答
1

处理 HTTP 请求的标准 Python 方法是 WSGI。WSGI 允许堆叠称为 WSGI 中间件的处理组件。这是您可以在请求到达框架内部之前修改请求的地方。CherryPy 是 WSGI 兼容的,所以中间件可以和它一起使用。

然而,CherryPy 不仅仅是一个框架,它还是一个 Web 服务器。如果您将其用作服务器,则很可能是一个cherrypy.quickstart()呼叫。要添加一个中间件,它需要更多的代码来构建一个站点“树”来生成一个 WSGI 应用程序并将应用程序连接到CherryPyWSGIServer类。这篇文章似乎解释得很好。然而,像往常一样,我建议使用 uWSGI 来运行 Python WSGI 应用程序,而不是 CherryPy 的内置服务器。它具有大量功能并克服了 GIL 问题。

此外,您可以使用页面处理程序/工具在实际处理请求之前对其进行操作。请参阅文档

于 2013-11-12T04:49:56.707 回答