2013-08-01 5 views
0

Я довольно новичок в разработке Django и веб-приложений, поэтому, возможно, мой вопрос не очень хорошо продумано.Дизайн приложения Django: выполнить общий набор запросов для каждого запроса

Для нового веб-сайта, над которым я работаю, я хотел бы выполнить набор запросов к базе данных для каждого входящего запроса. Мне интересно, какой лучший способ структурировать это в коде.

Чтобы быть более конкретным, я хотел бы показать приветствие (например, «Привет, Джон») и статус корзины пользователя пользователя в разделе заголовка, когда это применимо. Я подумал о создании вспомогательной функции get_header_details и вызове ее из каждого метода представления, но должен быть лучший способ сделать это. Мысли?

Кроме того, несмотря на то, что я хотел бы отображать статус приветствия и корзины покупок на каждой странице, возможно, мне не нужно запрашивать его на каждом запросе страницы. Есть ли хороший способ сделать это? Это учебный проект, поэтому я в порядке с добавлением вещей в свой стек технологий.

ответ

2

В торговом графике, middleware и context processor в сочетании с sessions и предпочтительно caching (например, Memcached) является путь.

Middleware позволяет выполнять произвольные действия до или после каждого вида. Контекстный процессор позволяет вставлять переменные в каждый шаблон. Наиболее распространенным способом реализации диаграммы покупок является использование сеансов, так как вы обычно не хотите сохранять состояние графика покупок по умолчанию (вы можете, конечно, предоставить этот параметр в качестве удобства).

Что касается приветственного сообщения, используйте кеширование, чтобы предотвратить дополнительный (возможно, ненужный) запрос по каждому запросу.

+1

Обратите внимание, что вам нужно убедиться, что вы используете «RequestContext», а не только «Контекст» для корректной работы контекстных процессоров. Самый простой способ сделать это - привыкнуть использовать ярлык «render» для создания ваших ответов, а не более старый «render_to_request». –