Python、Djangoでオリジナルのシステム開発(2)
オリジナルのシステム開発を通じてPython、Djangoを勉強する。
以降、ビジネスロジックなので記述を簡略する。
以下を実装した。
ログイン機能を実装する。
- views.py
loginメソッド定義。メインメニュー画面に遷移。
- forms.py
フォームバリデーション定義。
- biz.py
loginメソッドの内部処理定義。
参考:Django データベース操作 についてのまとめ - Qiita
formsに値が正しく設定されず、バリデーション処理がうまくいかない・・・
form = LoginForm(request.POST)
で自動的にマッチされると思っていたんだけど。
とりあえず先に進むことにする。
メインメニュー画面を作成する。
メニューボタンを配置。
セッション管理を実装する。
参照: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
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を生成してくれる。
食材を選択した時点で、デフォルトの賞味期限を入力するJavascriptを実装してみた。
一応、idとかは取得できるようだ。