Показаны сообщения с ярлыком tips. Показать все сообщения
Показаны сообщения с ярлыком tips. Показать все сообщения

пятница, 4 марта 2011 г.

Flask Tips - пред и пост обработка запроса на основе аргументов URL Rule

Проектируя дипломный проект, и разбираясь попутно в возможностях Flask и Werkzeug решил для себя небольшую задачку, и нашел удобные средства, которые могут решаться без применения middleware, на уровне приложения и модуля, что весьма удобно.

Объект Request в Flask, позволяет получить доступ к аргументам, полученным после парсинга URL. К примеру, у нас имеется Rule('/user/<username>'). При получении запроса, совпадающего с этим правилом, в request будет создан не пустой словарь request.view_args, который будет содержать аргументы для view. Но иногда, есть задачи, когда на основе этих аргументов требуется выполнять какую-то одну и ту же обработку в нескольких view, либо требуется, чтобы такая обработка была выполнена перед выполнением самого view, или возможно постобработка.

В Flask, приложение имеет возможность задать пост и пред обработчики, как уровня приложения, так и уровня модуля (если модули используются в приложении), и при последнем варианте, модуль может объявлять свои обработчики уровня приложения. Все они выполняются после создания объекта _RequestContext, объекты которого будут доступны, при запросе из в обработчиках. Это request, session, g и остальные. Поэтому, в обработчиках можно задействовать и request.view_args.

Рассмотрим на примере. Пример взят из моего дипломного проекта.