Метод грубой силы заключается в сравнении переменной request.path
с корнем статического представления, например, request.path.startswith('/static/')
.
. Метод, который мне больше всего нравится и используется в моих собственных приложениях, заключается в добавлении свойства.к request
объекту с именем db
, который лениво оценивается при доступе.Поэтому, хотя вы можете добавить его в запрос, он ничего не сделает, пока к нему не будет получен доступ.
import types
def get_db_connection(request):
if not hasattr(request, '_db'):
request._db = my_connect_to_db()
request.add_finished_callback(close_db_connection)
return request._db
def new_request_subscriber(event):
request = event.request
request.db = types.MethodType(get_db_connection, request)
Позже в вашем коде вы можете получить доступ к request.db()
, чтобы получить соединение.К сожалению, невозможно добавить свойство к объекту во время выполнения (afaik), поэтому вы не можете настроить его так, чтобы request.db
давал вам то, что вы хотите.Вы можете получить это поведение, не используя подписчика с помощью записи поваренной книги , где вы создаете подкласс Request
и добавляете свое собственное свойство lazy через декоратор @reify
Pyramid.