Редактировать
Понял, я не ответил на вопрос о кнопке. Похоже, вы пытаетесь вызвать функцию python из html (если у вас нет функции javascript в шаблоне внешнего интерфейса).
Ваш питон живет на сервере, а ваш html / javascript будет в браузере клиента - вам нужно заставить их общаться, отправив HTTP-запрос со своей страницы на сервер, вы не можете напрямую вызывать функции.
Сервер:
@app.route('/cart/<int:product_id>', methods=['POST'])
def add_to_cart(product_id):
product = Product.query.filter(Product.id == product_id)
cart_item = CartItem(product=product)
db.session.add(cart_item)
db.session.commit()
return render_tempate('home.html', product=products)
добавить в html:
<script>
function addToCart(productId) {
fetch('[your.local.host.]/cart/productId',
{method: 'POST'}
)
}
</script>
изменить кнопку:
<button onclick="addToCart({{product.id}})" type="button" class="btn btn-primary">Add to Cart</button>
Или что-то подобное. Ваша страница должна общаться с вашим сервером через HTTP-запросы.
Оригинальный ответ об тележках
Вероятно, нет необходимости сохранять вашу корзину в базе данных, если вы действительно не хотитепользователи могут получить доступ к одной и той же корзине при входе в систему на разных устройствах, или вы ожидаете, что им потребуется более долгое время хранить там товары.
Сохранение добавит ненужное время к пользовательским запросам (пока вы добавляете / извлекаете их). ) и эта таблица CartItem будет продолжать увеличиваться и увеличиваться, а большинство строк станут избыточными (маловероятно, что люди захотят просматривать свою старую корзину после покупки продуктов). Одним из решений было бы также связать корзины с таблицей User
, чтобы у вас была только одна корзина на пользователя (при условии, что ваши пользователи вошли в систему при совершении покупок), или убедитесь, что вы удаляете корзины, когда они куплены или по истечении определенного временипериод.
Тем не менее, если вам больше не нужно сохраняться в течение более длительного срока, рассмотрите возможность хранения идентификаторов продукта либо в
Колба session
. По сути, это легковесное хранилище в памяти на сервере, которое связано с пользователем и может быть доступно во время обработки запроса. См. Учебник по сеансам здесь .
Внутри cookie. Cookie хранится в браузере (не на сервере) и обычно подписывается ключом. Это не делает их безопасными - это просто означает, что вы можете быть уверены, что никто не изменил его содержимое при извлечении его на сервер. См. Учебное пособие здесь .
В этой статье обсуждаются некоторые недостатки / достоинства обоих подходов.