管理番号:W010
はじめに
今、PythonでWEBアプリの作成を進めています。少しづつ機能を追加して、ローカルの仮想環境で動作確認をするという作業を地道に行っている状況です。
そして、進捗がある都度、このブログで紹介しています。
前回までの状況
前回は、ログイン機能の追加にチャレンジしてみました。
Flask-loginでログイン機能を追加して
flask_sqlalchemyでログインユーザーをデータベース管理しています。
■現在の画面表示■
改善が必要な点
家計簿情報は、あまり人に見られたくない情報です。
前回、ログイン機能を追加したことで、誰でも家計簿情報を閲覧できてしまうという問題は解決しました。
しかし、まだ解決しないといけない問題が残っています。
ログインユーザー間で、他のユーザーの家計簿情報が閲覧できてしまう、という点です。
現在、JSONファイルの辞書型リストを家計簿用のデータベースとして代用しています。
この一つのデータベースに複数のユーザーがログインして、その全てのユーザーが、このデータベースに登録されている全ての情報を閲覧することが出来てしまうという状態です。
ログインユーザー間でも、閲覧制限をかけて、各自の固有の情報だけが閲覧できる仕様にする必要があります。
今回の実施内容
そこで、今回は、ログインしたユーザーが、それぞれ、自分の家計簿情報だけを閲覧することができるようにしたいと思います。
今、家計簿用のデータベースは一つ。これにどのように、ユーザー毎の閲覧制限をかけるか、考えてみました。
思いついたのが、各データに
「ユーザー名」と「管理番号」
の情報を持たせることにより、擬似的にユーザー毎にデータベースが存在するように見せようというものです。
もう少し具体的に説明しますと
ユーザーがログインしたときに、家計簿用のデータベースの中から、そのユーザー名が登録されたデータのみを画面上に表示します。
こうすることでログインしたユーザーは、画面上に表示された自分の情報だけしか閲覧することが出来なくなります。
そして、管理番号は、各データを削除する場合に使用します。
削除したいデータの管理番号を指定して削除するのですが、ここで少し問題があります。
家計簿用のデータベースとして使用しているJSONファイルの辞書型リストに、どのように管理番号を付与するか、という点です。
本物のデータベースでは、各データに管理番号として重複しないIDを採番してくれる機能があります。
しかし、JSONの辞書型リストにはそのような機能は無いようですので、別の方法で重複しないIDを採番する必要があります。
そこで今回は、ULID というユニーク(一意な)ID を生成するための仕様/規格で重複の無い管理番号を付与することにしました。
以下に今回のプログラムの修正のうち主なものを紹介します。
関連ファイルの説明
プログラムの修正の紹介は、関連するファイルとそのコード修正について部分的に抜粋して説明していますので、全体のどの部分を修正しているのかを把握し辛いと思います。
その点を緩和するために、このプロジェクトで使用するファイルやフォルダ構成を、別ページで解説しています。
必要に応じてご覧ください。(→参考)
では始めます。
ライブラリインストール
必要なライブラリをインストールします。
今回は、python-ulidをインストールです。
前述しましたULIDのpythonライブラリが、python-ulidです。
VScode の 仮想環境に入って、
ライブラリのインポート
■main.py■
■説明等■
さきほど、インストールした「ulid」と「url_for」を追加でインポートします。
データ初期設定の変更
家計簿情報表示処理方法の変更
データ追加時の処理方法の変更
main.pyの「def kd()」で「user_name」を受け取り、
受け取ったユーザー名を基にログイン中のユーザーの家計簿リスト「updated_search_list」を作成
作成したリストを家計簿ページ「kd.html」へ送る処理を追加します。
データ削除時の処理方法の変更
実施結果
ログインすると、ログイン中のユーザーの家計簿データのみが表示されます。


0 件のコメント:
コメントを投稿