今更一から勉強しよう

勉強のノート。

Python、Djangoでオリジナルのシステム開発(2)

オリジナルのシステム開発を通じてPythonDjangoを勉強する。

以降、ビジネスロジックなので記述を簡略する。
以下を実装した。

ログイン機能を実装する。

  • views.py loginメソッド定義。メインメニュー画面に遷移。
  • forms.py フォームバリデーション定義。
  • biz.py loginメソッドの内部処理定義。

参考:Django データベース操作 についてのまとめ - Qiita

formsに値が正しく設定されず、バリデーション処理がうまくいかない・・・
form = LoginForm(request.POST) で自動的にマッチされると思っていたんだけど。
とりあえず先に進むことにする。

メインメニュー画面を作成する。

メニューボタンを配置。

f:id:ebi40:20200329145559p:plain

セッション管理を実装する。

参照:Djangoでセッションを使用する - ゾンビでもわかるPythonプログラミング

ログイン処理でセッション情報を保持する。

request.session['user_id'] = bean.user_id

各viewsのinit処理でセッション情報がなければ404を表示する。

if request.session.get('user_id') is None:
raise Http404

これがスマートなやり方かはわからない。

共通部を作成する。

  • システムロゴを表示
  • ログオフを実装

以下で実装する。 - ベースとなるアプリを作成。 - ベースとなるアプリのHTMLにシステムロゴ、ログオフボタンを作成。 - 各アプリでベースアプリのHTMLを継承。

Bootstrapの使い方がよくわからない・・・
別途勉強することにする。 参考:Bootstrapの使い方 導入方法と基本・レスポンシブデザインを徹底解説 | WEBST8

HTMLの継承

{% extends "SC0000base\SC0000base.html" %}

タイトルなどを動的に変えたい場合
ベース

<title>{% block title %}{% endblock %}</title>

継承先

{% block title %}メインメニュー{% endblock %}

コンテンツを埋め込む方法
ベース

{% block content %} {{ content }} {% endblock %}

継承先

{% block content %} ~ {% endblock %}

JS等も、基本的には同じ。

Djangoフォームを利用したマスタを作成する。

  • Modelを定義する。
  • フォームを定義する。
  • HTMLを作成する。
  • viewsを作成する。

setting.py

INSTALLED_APPSに'bootstrap4' を追加。

form f:id:ebi40:20200331192606p:plain

html

{% bootstrap_form form layout='horizontal' %}

views

foodstock = FoodStock() return render(request, 'SC3010entry_foodstock/foodstock_edit.html', dict(form=form, foodstock_id=foodstock_id))

formで定義し、viewsでformをインスタンス化し、htmlにdictで渡す。
htmlで{% bootstrap_form ...を書くと、自動的にhtmlを生成してくれる。

f:id:ebi40:20200331192459p:plain

食材を選択した時点で、デフォルトの賞味期限を入力するJavascriptを実装してみた。
一応、idとかは取得できるようだ。