11-Flask

Flask(Part.26)| 【注文管理アプリケーションのプログラミング(2)l(1)の解説】

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

目標

  • 商品注文処理のプログラム内容を理解できる。

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

商品注文処理の流れ

商品注文処理では次の処理を行うプログラムを作成しました。

  • 各テーブルにアクセスがあった場合は伝票を新規で作成する。
  • アクセスに伴って、メニュー一覧が表示される。(商品は事前に登録済)
  • メニュー一覧の表示の右には注文した商品と合計額が表示される。
  • メニューから注文したい商品を選択すると注文フォームが表示される。
  • 注文フォームでは商品の個数を入力して注文を確定できる。(キャンセルボタンは未設定)

具体的なプログラムは以下の通りです。

app.pyのプログラミング(ordersapp内)

import os

from flask import Blueprint, redirect, render_template, 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"),
)


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()
    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,
        orders=orders,
        table=table,
        categories=categories,
        total_amount=total_amount,
        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

        order = Order(
            table_id=table.id,
            product_id=product.id,
            quantity=quantity,
            total=total,
            product_name=product.name,
        )
        db.session.add(order)
        db.session.commit()
        return redirect(url_for("orders.order_menu", table_id=table.id))

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

<int:table_id>は、Flaskにおける URLパラメータ を定義するための書き方です。URLパラメータは、このように、URLパラメータの一部に「変数」を埋め込むことができます。今回の場合は、URLに含まれる値を 整数型 としてtable_idという名前の変数にマッピングします。これにより、URLに含まれる値がビュー関数の引数として自動的に渡されます。

URLが「/order/table/5」であれば、整数 5 を table_id という引数に変換します。これにより、ビュー関数内で table_id = 5 として使用できます。これを利用して、対応するテーブル情報をデータベースから取得したり、注文処理を行ったりします。

form.validate_on_submit()

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

今回は以上になります。

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

ブックマークのすすめ

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

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