2013-11-12 1 views
1

Я хочу, чтобы уловить аргументы методов моего приложения CherryPy до самого метода. Но я не уверен, есть ли способ сделать это в CherryPy или со стандартным питоном. Это должно выглядеть примерно так:CherryPy: как обрабатывать запрос до того, как он достиг прикладного метода?

HTTP Request -> Parser поймать аргументы -> CherryPy, который передает запрос метода

Моя цель состоит в том, чтобы захватить ввод и вывод на сервер не нарушая кода в самом методе.

Кроме того, как вы можете перенаправить запрос на сервер CherryPy на другие серверы CherryPy?

ответ

3

Вот как я проверяю методы post для действительного токена 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) 

Надеюсь, что это поможет!

+0

Привет, Спасибо за ответ. Позвольте мне понять, если я понимаю, каждый запрос обрабатывается сначала методом «check_token», который вы поместили в панель инструментов cherrypy, а «befoe_handler» устанавливает место метода (следовательно, до вызова метода приложения). –

+0

Это правильно. Кроме того, вы можете использовать 'before_finalize', который вызывается после завершения обработчика страницы. –

+0

Спасибо большое, вы были очень полезны –

1

Стандартным способом обработки HTTP-запросов Python является WSGI. WSGI позволяет укладывать компоненты обработки, называемые промежуточным программным обеспечением WSGI. Именно здесь вы можете изменять запросы до того, как они попадут во внутреннюю структуру фреймворка. CherryPy совместим с WSGI, поэтому с ним можно использовать промежуточное ПО.

Однако CherryPy - это больше, чем просто фреймворк, это также веб-сервер. Если вы используете его как сервер, это скорее всего звонок cherrypy.quickstart(). Чтобы добавить промежуточное программное обеспечение, для создания сайта «дерево», создающего приложение WSGI, и для подключения приложения к классу CherryPyWSGIServer, ему потребуется еще некоторое кодирование. This article, кажется, объясняет это хорошо. Однако, как обычно, я рекомендую использовать uWSGI для запуска приложений Python WSGI вместо встроенного сервера CherryPy. Он имеет множество функций и преодолевает проблему GIL.

Кроме того, вы можете использовать обработчики/инструменты страниц для управления запросами до их фактической обработки. См. docs.