領収書の管理が面倒になってきたので、Flaskで領収書を管理するWebアプリの作成を試みます。色々つけたい機能を考えていると、FlaskよりもDjangoの方が楽なんじゃないかなと思っています。しかし、Djangoは触ったことがなく作成に時間がかかりそうなので、一旦Flaskで作ってみて時間があればDjangoで作り直そうと考えています。
もくじ
作成済みの機能
入力フォーム
アップロードするファイルを見ながら、必要項目にデータを入力。
データベースへの登録項目
- 取引日
- 取引相手
- 金額
- アップロードしたファイルのPATH
- 登録年月日(自動入力)
アップロードしたファイルの閲覧
クリックでアップロードしたファイルを1つずつ閲覧(ダウンロード)。ただし、セキュリティなし。
追加したい機能
最近、特に忘れやすいので思いついた機能を記録しておきます。
ログイン機能
ローカル環境で運用する場合は、必要ないかもしれないが、Webアプリとして運用するにはログイン機能は必須。
アップロードファイルの制限
ファイルの種類とサイズを制限する。jpgとPDF、サイズはMAXで1M-2Mぐらいかな。
検索機能
取引日、取引相手、金額、最低でもこの3つの項目から複合的に検索できるようにする。
合計金額表示
標準時はこれまでの合計金額、検索後は検索結果の合計金額を表示する。
変更削除履歴
アプリ上からは、登録したデータは変更も削除も出来ない仕様だが、内部ログとして変更削除履歴機能をつけておきたい。
重複確認
基本的に、登録したデータは削除出来ないので、データを登録する前に重複していないか確認できるようにする。ファイル名はsecureな名前に変更される可能性があるので、重複チェックは取引日と金額をベースにする。
ファイルの一括ダウンロード
個別にファイルの閲覧、ダウンロードだけではなく、アップロードしたファイルを一括ダウンロードできるようにしたい。出来れば検索結果に適合したファイルだけ一括ダウンロードできるようにする。
CSV形式でエクスポート
登録したデータをCSVファイルとしてダウンロードできるようにする。
次年度更新
登録したデータとファイルは1年毎に管理したいので、次年度更新するとデータベースとアップロードディレクトリを自動で作成できるようにしたい。
データベースの移行
現在はsqliteで作成しているが、将来的にはMySQLやPostgreSQLに移行する。ソースコードではSQLAlchemyで書いているので、比較的簡単に移行できるのかな?
運用サーバー
ブログを書きながら冷静に考えてみると、ちょっと、このアプリは完成できないかもしれません。やっぱり、Webアプリって、すごく難しいです。特に、セキュリティ面が。セキュリティの知識が無いので、データベースの流出や改ざんの危険性がかなり高いです。
このブログでデモアプリを稼働させていますが、レンタルサーバーなのでroot権限がなく出来ることも限られています。私に知識がないため、ローカル環境で動いていたソースコードも、レンタルサーバーでは動かなかったりします。大事なデータをsqliteで運用するのも怖いです。
かといって、VPSサーバーに移行すると、さらにセキュリティの知識が必要です。今のままだと、VPSサーバーごと乗っ取られそうです。
というわけで、私の場合、現状ではローカル環境での運用しか選択肢がありません。
設置デモ
データベースへの登録は切ってあります。
ダウンロード機能は、切ってある時があります。
テスト用データを5000件登録済みです。プログラムで適当に作ったデータなので、IDと日付に関連がありませんが、実際の運用ではID順と日付順は似た結果になると思います。
https://dattesar.com/manage-receipt-demo/
追加機能 v0.1
- ログイン機能
- 登録ファイルのプレビュー機能
- 検索機能
- 合計金額表示
https://dattesar.com/manage-receipt-demo-noregi/