11-Flask

Flask(Part.62)| 【QRコード生成アプリケーション】

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

目標

  • QRコード以外ではアクセスできないようにする(困難にする)
  • QRコードを作成してアクセスできるか確認する

QRコードに限定したアクセス

QRコードに限定したアクセス

これまで、作成してきた注文オーダーアプリは、ひとつのテーブルから複数人が同時にアクセスして注文をできることを想定しています。ただし、この時、利用するURLはテーブル番号が「2」ならhttp://PC名/orders/order/table/2、テーブル番号が「5」であればhttp://PC名/orders/order/table/5とシンプルなため、悪意のあるユーザーが手打ちで他人の会計情報を見れるといった怖さがあります。これに対処します。

feature-qrcode-securityブランチ

ここでは、QRコードを利用したセキュリティ対策を行うのでブランチの名前を「feature-qrcode-securityブランチ」とします。次のコマンドで「feature-qrcode-securityブランチ」を作成します。

git checkout -b feature-qrcode-security コマンド

QRコード作成アプリケーション

ここからFlaskアプリケーションでQRコードを生成するためのシステムを作成します。QRコード生成と利用には、QRコードを画像として出力する機能を持つqrcodeライブラリと画像処理を行えるPillowライブラリのインストールが必要です。次のコマンドでqrcodeライブラリとPillowライブラリを一緒にインストールします。

pip install qrcode[pil]

必要なファイルとディレクトリの準備

QRコードを生成するアプリケーションに利用するファイルを準備します。このアプリケーションで利用するディレクトリ名は「qrcodeapp」とします。

  • apps/qrcodeapp/static/css/style.css
  • apps/qrcodeapp/templates/qrcode_base.html
  • apps/qrcodeapp/templates/qrcode_make.html
  • apps/qrcodeapp/app.py
  • apps/qrcodeapp/models.py

QRコードを生成するアプリケーション

モデル(TableAccessToken )

from sqlalchemy import DateTime

from apps.common.db import db


class TableAccessToken(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    table_id = db.Column(db.Integer, db.ForeignKey("table.id"))
    token = db.Column(db.String(64), unique=True, nullable=False)
    expires_at = db.Column(DateTime(timezone=True))
    abort_flag = db.Column(db.Boolean, default=False)
    bill_id = db.Column(db.Integer, db.ForeignKey("bill.id")) 

    bill = db.relationship("Bill", backref="access_tokens")

トークンの発行

import secrets
from datetime import datetime, timedelta

def create_token_for_table(table_id, valid_days=7):
    token = secrets.token_urlsafe(16)
    expires_at = datetime.now(timezone.utc) + timedelta(days=valid_days)

    new_token = TableAccessToken(
        table_id=table_id, token=token, expires_at=expires_at, bill_id=None
    )
    db.session.add(new_token)
    db.session.commit()

    return token

トークンを利用したQRコードの発行

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

今回は以上になります。

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

ブックマークのすすめ

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

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

Flask(Part.51)| 【日計表示・月次表示アプリケーションへの預金出納帳表示追加】

2025年4月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
11-Flask

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

2025年3月19日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア 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.47)| 【日計表示・月次表示アプリケーションの作成】

2025年4月9日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア 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.24)| 【テーブル管理アプリケーションのコミット】

2025年3月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア 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.40)| 【レジ管理アプリケーションのプログラミング(2)】

2025年4月2日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア 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.13)| 【ふたつのテーブルの利用(3)テンプレート部分の解説】

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