Dmitry: Если считать на бэкенде - это будет намного больше, чем два раза (если, конечно, меню интерактивное). Схема такая:
1) Юзер что-то поменял
2) Запрос в бэкэнд
3) Запрос в базу
4) Ответ во фронтэнд
И так с каждым действием пользователя. И после этого всё равно нужно посчитать на бэкэнде, чтобы хитрые хацкеры не заказали себе 10 пицц за 1$.
А с кнопкой, если считается на стороне сервера, добавится один лишний запрос. Если это не хайлоад - пофигу, где считать.
YAshchenKO: SQLite хорош, как локальная БД (вместо кучи файлов) или БД для быстрого разворачивания разработки. SQLite медленная, блокируется и при масштабировании проекта вам придётся всё равно менять её.
mx6001: Точно стоит обратить внимание на:
1) reverse функцию (в шаблонах писать {% url 'some_view' %}, а не хардкодить, при этом в urls.py дописывать к каждому урлу name='some_view' (some_view - в нашем случае)). В этом случае, чтобы изменить урл с /books/1/ на /cool-books/1/ , достаточно будет просто заменить строку в urls.py
2) Class Based Views.
3) Забудь про апач.