python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

  • 注文管理アプリケーションでCart(セッションを利用したプログラム)を実装できる。

注文管理アプリケーションの作成

注文処理の修正

ここからは、注文管理アプリケーションでセッションを利用し、買い物かごを実装します。そのため、必要個所を追記・修正します。

注文管理アプリケーションのプログラミング

app.pyの編集(ordersapp内)

app.pyファイルを次のように編集します。

import os

from flask import Blueprint, redirect, render_template, request, session, url_for

from apps.common.db import db
from apps.ordersapp.forms import OrderForm
from apps.ordersapp.models import Order
from apps.productsapp.models import Category, Product
from apps.tablesapp.models import Table

orders_bp = Blueprint(
    "orders",
    __name__,
    template_folder=os.path.join(os.getcwd(), "apps", "ordersapp", "templates"),
    static_folder=os.path.join(os.getcwd(), "apps", "ordersapp", "static"),
)


# カートをテーブルIDごとにセッションから取得するヘルパー関数
def get_cart(table_id):
    if f"cart_{table_id}" not in session:
        session[f"cart_{table_id}"] = []
    return session[f"cart_{table_id}"]


def create_orders_app(app):
    """Blueprintを新規作成し、登録する関数"""
    return orders_bp


@orders_bp.route("/order/table/<int:table_id>", methods=["GET"])
def order_menu(table_id):
    table = Table.query.get_or_404(table_id)
    categories = Category.query.all()
    products = Product.query.all()
    cart = get_cart(table_id)

    # 現在のテーブルの注文履歴を取得
    orders = Order.query.filter_by(table_id=table.id).all()

    # 合計額を計算する
    total_amount = sum(order.total for order in orders)

    return render_template(
        "order_menu.html",
        products=products,
        cart=cart,
        table=table,
        categories=categories,
        total_amount=total_amount,
        orders=orders,  # 注文履歴を渡す
        title="メニュー一覧",
    )


@orders_bp.route(
    "/order/table/<int:table_id>/product/<int:product_id>", methods=["GET", "POST"]
)
def order_form(table_id, product_id):
    table = Table.query.get_or_404(table_id)
    product = Product.query.get_or_404(product_id)
    form = OrderForm()

    if form.validate_on_submit():
        quantity = form.quantity.data
        total = product.price * quantity

        # カートに追加(テーブルごとにセッションを使用)
        cart = get_cart(table_id)
        cart.append(
            {
                "product_id": product.id,
                "product_name": product.name,
                "quantity": quantity,
                "total": total,
            }
        )
        session.modified = True  # セッションを変更したことを通知
        return redirect(url_for("orders.order_menu", table_id=table.id))

    return render_template(
        "order_form.html",
        form=form,
        product=product,
        table=table,
        title="注文フォーム",
    )


@orders_bp.route("/order/cart/<int:table_id>", methods=["GET", "POST"])
def order_cart(table_id):
    table = Table.query.get_or_404(table_id)
    cart = get_cart(table_id)
    total_amount = sum(item["total"] for item in cart)

    if request.method == "POST":
        # 注文確定処理
        for item in cart:
            # 注文をデータベースに保存
            order = Order(
                table_id=table.id,
                product_id=item["product_id"],
                product_name=item["product_name"],
                quantity=item["quantity"],
                total=item["total"],
            )
            db.session.add(order)

        db.session.commit()

        # 注文後、カートをクリア
        session[f"cart_{table_id}"] = []
        session.modified = True

        # 確定後、再度注文情報を表示するためにリダイレクト
        return redirect(url_for("orders.order_menu", table_id=table.id))

    return render_template(
        "order_cart.html",
        cart=cart,
        total_amount=total_amount,
        table=table,
        title="注文確認フォーム",
    )

order_menu.htmlの編集(ordersapp/templates内)

order_menu.html を次のように編集します。

この続きはNoteとなります。

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...