akatak blog

プログラム初心者の50代ビジネスマンがセカンドキャリアを目指して働きながらPythonを中心に独学していましたが、昨年IT系企業に転職。新規事業開発の仕事をすることになりました。自らの覚え書きや成果物、感じたことなどを脈絡もなく書き連ねるブログです。

Djangoで読書管理Webアプリを作る

ちょうど一年ほど前に、「FlaskとSQLAlchemyで読書記録Webアプリを作る」という記事を書きました。

その際に「DjangoはWebアプリケーションの作成までの決まりごとが多く、ハードルが高いため、とりあえずでいいからWebアプリケーションを簡単に作ってみたい方にはFlaskがオススメです。」と言っておりました。

確かにそうなのですが、その後がありました。Flaskは"Hello, World!"や簡単なホームページを作成するのはハードルが低いのですが、だんだんと機能を強化していくには、Flask-SQLALchemyやFlask-Migrateだったり、flask-WTFだったり、様々なモジュールを追加していかなくてはならないんですよね。これが結構、面倒だったりします。

一方で、Djangoは最初のハードルは高いのですが、一旦、当初の一連のセッティングや決まりごとを理解すると、なんといっても三大フレームワークの一つ、Webアプリケーションの機能強化を比較的簡単に図っていけることに気が付きました。

特に、デフォルトのAdmin(管理)画面を利用して、ユーザー登録機能が比較的簡単にできるし、デフォルトで十分なパスワードの暗号化が図られていたり、と至れり尽せり、という感じでしょうか。ただ、機能がありすぎて、公式ページで発見したDjango DocumentationというPDFをダウンロードしたところ、何と1996ページ!(笑)。まぁ、そのうち一部でも使えれば良いと考えることにしました。

ということで、昨年Flaskで作成した読書記録Webアプリの機能強化バージョンをDjangoで作成し、Herokuにデプロイしました。

なお、個人別に読書記録を管理する必要がありますので、ユーザー登録(メールアドレス・パスワード)は必須となっています。ただし、最終的にアプリを利用する必要がなくなった場合に、ユーザー登録は削除可能となっており、Heroku上のpostgreSQLからメールアドレスの情報も含めて削除されますので、ご安心ください。

【追記(2020/8/30)】

個人としてユーザー登録せずに機能の確認をしていただけるように、共有とはなりますが、以下のメールアドレス(テスト用)とパスワード(テスト用)を設定しました。是非ご利用ください。

メールアドレス(テスト用): test@user.com
パスワード(テスト用): testpassword

django-book-records.herokuapp.com

インデックスページ、ユーザー登録ページ、読書記録の入力ページのイメージを貼り付けておきます。

f:id:akatak:20200701154254p:plain

f:id:akatak:20200701154606p:plain

f:id:akatak:20200701154624p:plain

 アプリケーションの概要

django-book-records

Django 2.2を利用した読書記録を管理するWebアプリケーションです。Herokuサービスに登録・アップロードしています。

主な機能

主な機能は以下の通りです。

  • ユーザ登録機能。メール・パスワードを入力し仮登録。そして、入力したメールアドレスに自動メールを送信、本文に記載のリンクをクリックことで本登録完了。
  • パスワード変更可能。また、パスワードを忘れた場合への対応機能も実装。
  • ユーザー毎に読書記録の登録機能。入力フィールドは、以下の6つです。
    1. タイトル(必須)
    2. ジャンル
    3. 著者名
    4. おすすめ度(5段階)(デフォルト=「3:普通」)
    5. 読了日(デフォルト=当日)
    6. コメント
  • 入力データの登録、更新、削除に対応しています。
  • ジャンル登録機能。読書記録とは別画面で、読書記録登録前に先に登録しておく必要があります。
  • 著者名登録機能。読書記録とは別画面で、読書記録登録前に先に登録しておく必要があります。
  • その他の機能として、「インポート」「エクスポート」「一括削除機能」があります。
  • インポート機能は、csv形式のファイルからデータを取り込む機能です。「その他」の「インポート」を選択すると、ファイル選択画面に推移します。留意点は以下の通り。
    1. 1行目及び1列目は取り込まない仕様になっています。csvファイルを作成する際には、1行目をタイトル行、1列目を通し番号に利用する等、適宜ご利用ください。
    2. csvの各行は「No」「タイトル」「ジャンル」「著者」「読了日」「おすすめ度」「コメント」の順で、作成してください。
    3. 「読了日」は YYYY-MM-DDのフォーマットで作成してください。
    4. おすすめ度は、1〜5の間で半角数字にて指定してください(5: とてもオススメ, 4:オススメ, 3: 普通, 2: どうだろう, 1: オススメせず)。 一旦、ひとつ読書記録を入力し、エクスポート機能を利用してcsvファイルを作成し、そのファイルを更新すると比較的楽にインポート用のcsvファイルを作成できるかと思います。
  • エクスポートは、「その他」の「エクスポート」をクリックすることで自動的に読書記録が全件ダウンロードされます。
  • その他「一括削除機能」があります。
  • 検索機能については、スペースで区切った複数語検索に対応しています。
  • Bootstrap4を利用しています。入力フォームではdjango-bootstrap4を利用してます。
  • Bootstrap Pagination を利用しています。1ページあたりの表示件数を10件に設定しています。
  • 読了日は、当日から10年前から翌年まで登録可能です。

Requirement

Django==2.2.5
django-bootstrap4==2.0.1

参考にさせていただいたサイト

ユーザー登録機能は以下のサイトに記載のスクリプトを利用させていただいております。

narito.ninja

その他、インポート・エクスポート機能も大いに参考にさせていただきました。ありがとうございました。

narito.ninja