11-Flask

Flask(Part.63)| 【QRコードの使いまわしを回避する】

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

目標

  • 会計が完了した伝票のQRコードからアクセスできないようにする

トークンを維持した注文処理

トークンを維持した注文処理

前回作成したQRコード生成アプリケーションではURLにトークンを追加して、より安全にアクセスすることができるようになりました。ですが、この修正を行った後では、伝票にアクセスした後、注文処理等を行うとエラーが発生してしまいます。これはページ遷移を行うときにトークンが維持されないためです。このエラーが起こらないようにするために、トークンの取得と送信のプログラムを追記します。

ここでは、前回同様「feature-qrcode-securityブランチ」で作業を行います。

apps/ordersapp/app.py

apps/ordersapp/app.pyファイルにはトークンを取得する次のプログラムを全てのルートの先頭に追記します。

# トークン取得
    token = request.args.get("token") or request.form.get("token")

取得したトークンはテンプレート側でも利用するので「render_template」にも追記します。

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

order_menuではトークンが存在しない場合のアクセスを受け付けないので次のプログラムが必要です。最後の token_obj.abort_flag は 会計済みの伝票QRコードを利用できなくするプログラムです。

    # トークン取得
    token = request.args.get("token") or request.form.get("token")
    if not token:
        abort(404)

    # トークン情報を取得
    token_obj = TableAccessToken.query.filter_by(token=token, table_id=table_id).first()
    if not token_obj:
        abort(404)

    if token_obj.abort_flag:
        abort(404)

change_statusではTableAccessTokennのテーブルへ伝票番号を登録しています。こうすることでregisterapp側(管理用の会計処理側)でBillモデルのbill_idを利用してトークンを取り出すことができます。

        # ステータスが pending に変更された場合に token に bill_id を紐づける
        if status == "pending" and token:
            token_obj = TableAccessToken.query.filter_by(token=token).first()
            if token_obj:
                token_obj.bill_id = bill.id
                db.session.commit()

Not Foundに備えて次のルートを追記します。

# 404 Not Found エラーハンドラー
@orders_bp.errorhandler(404)
def not_found_error(error):
    return render_template("404.html"), 404

apps/ordersapp/app.py

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

今回は以上になります。

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

ブックマークのすすめ

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

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

Flask(Part.61)| 【新規伝票に直前のテーブルのカート内容が引き継がれるバグの修正】

2025年4月23日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
11-Flask

Flask(Part.37)| 【商品管理アプリケーションの修正(2)】

2025年3月30日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
11-Flask

Flask(Part.2)| 【MVTの概要とアプリケーションの起動方法 】

2025年2月13日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site