ユーザプログラムで画面を制御しよう

ユーザプログラムを組み込んで
画面の制御をしてみるぞい

Pythonでいろんなことができるんですね

1.ユーザプログラムによるさまざまな画面の制御

ユーザプログラムによる、さまざまな画面の制御を学んでいきましょう。
今回紹介するのはほんの一例ですので、自分でプログラムを書いてみて色々試してみるのも面白いと思いますよ。

1-01.項目の初期値を指定

項目に初期値を指定するユーザプログラムを作成します。
\ユーザプログラム\ユーザプログラム.mdに次のように書き保存してください。

...
|本日の日付              |get_today.py  |get_today  |

解説:
get_today.pyというPythonファイル内に本日日付を取得するプログラムを記述する。
日本語名は本日の日付とする。

次にPythonを記述していきます。
\ユーザプログラム\get_today.pyに次のように書き保存してください

from django.utils import timezone, dateformat

def get_today(*args, **kwargs):
    return dateformat.format(timezone.now(), 'Y-m-d')

解説:
djangoのユーティリティ’timezone’から今の日時を取得し、’dateformat’で日付に変換して値を返す

最後に画面項目に指定して下さい。
\ビュー\家計簿テーブル登録.mdに次のように書き保存してください。

- 以下の入力フォームを設置する。
  - 【入力項目】
    - 日付
      ・・・
      - 初期値:ユーザプログラム「本日の日付」

解説:
日付という項目に本日の日付という名前のユーザプログラムを指定する

1-02.項目の入力チェック

項目の入力チェックを指定するユーザプログラムを作成します。
\ユーザプログラム\ユーザプログラム.mdに次のように書き保存してください。

...
|0より大きいか判定      |should_be_greater_than_zero.py|validate     |

解説:
should_be_greater_than_zero.pyというPythonファイル内に0より大きい数値か判定するプログラムを記述する。
日本語名は0より大きいか判定とする。

次にPythonを記述していきます。
\ユーザプログラム\should_be_greater_than_zero.pyに次のように書き保存してください。

from django.core.exceptions import ValidationError

def validate(value):
    if value <= 0:
        raise ValidationError('0より大きい値を指定してください。')

解説:
入力されている値が0より大きいかを判定し、大きくない場合’ValidationError’でエラーを返す

最後に画面項目に指定して下さい。
\モデル\トランザクション.md#家計簿テーブルに次のように書き保存してください。

...
- 検定処理
  - 入金額:0より大きいか判定
  - 出金額:0より大きいか判定

解説:
入金額・出金額に0より大きいか判定するという名前のユーザプログラムを指定する

1-03.項目の表示形式

項目の表示形式を指定するユーザプログラムを作成します。
\ユーザプログラム\ユーザプログラム.mdに次のように書き保存してください。

...
|円通貨表示形式          |apply_yen_format.py           |manipulate   |
|曜日付き日付形式        |apply_Ymda_date_format.py     |manipulate   |

解説:
apply_yen_format.pyというPythonファイル内に値を円通貨の表示形式に変更するプログラムを記述する。
日本語名は円通貨表示形式とする。
apply_Ymda_date_format.pyというPythonファイル内に曜日付きの日付形式に変更するプログラムを記述する。
日本語名は曜日付き日付形式とする。

次にPythonを記述していきます。
各ファイルに次のように書き保存してください。

・apply_yen_format.py

def manipulate(value):
    return '¥{:,}'.format(value)

・apply_Ymda_date_format.py

import locale

def manipulate(value):
    locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
    return value.strftime("%Y年%m月%d日 (%a)")

解説:
それぞれpythonの処理でフォーマットを変更し、値を返している。

最後に画面項目に指定して下さい。
\ビュー\家計簿テーブル検索.mdに次のように書き保存してください。

...
- 検索結果の一覧には以下の項目を表示する。
...
    - 日付【曜日付き日付形式】
...
    - 入金額【円通貨表示形式】
    - 出金額【円通貨表示形式】

解説:
項目の右端に【ユーザプログラム】を指定する。

1-04.その他画面・項目の制御

冒頭でもお伝えしましたが、本章で紹介する例題はほんの一部です。
もちろん自分でPythonを書くことも可能ですので、ぜひチャレンジしてみてくださいね。

・学習チェック

Product by Trancom-ITS