ログイン画面
家計簿アプリを使用するためのログイン画面
ログイン画面

Loginクラス
概要
通常fletでの画面の作成はViewで作成するが、自作コントロールのMy_Control.MyViewを使用する
エラーメッセージを表示するコントロールは、自作コントロールのMy_Control.Msgboxを使用する
自作コントロールを使用することで、元のコントロールでの設定が省略され、デザインの統一化できる
【Loginクラスのイニシャライザ】
・ログインアダプターのインスタンス化
・画面のコントロール・ウィンドウの設定
を行う
【ログインボタン】
ログインボタンを押した時
・ユーザーID
・パスワード
が空欄の場合、エラーメッセージを表示する


ユーザーIDとパスワードが入力されている場合
・ログインアダプターにユーザーID、パスワードを渡し、ログイン認証を行う
・ログインアダプターからユーザー情報を受け取る
ログインアダプターから受け取った情報にユーザー情報がない場合
・エラーメッセージを表示する

DB操作時に例外エラーが発生した場合
・例外エラーメッセージを表示する


ログインアダプターから受け取った情報にユーザー情報がある場合
・pageのdataにユーザー情報を設定する(ログ出力の際に使用する)
・家計簿一覧画面を表示する

ソースコード
import flet as ft
from db.login_adapter import Login_Adapter
from common.my_control import My_Control
from common.message import Message
from common.const import Const
from common.method import CommonMethod
from config.config import Config
# ログイン画面
class Login(My_Control.MyView):
def __init__(self, arg_page: ft.Page):
self.page = arg_page
self.config = Config()
# オーバーレイ作成
self.overlay = My_Control.MyOverlay(self.page).overlay
# ログインアダプターをインスタンス化
self.login_adapter = Login_Adapter()
# 画面ラベル作成
self.display_label = ft.Container(
content=ft.Text(
Const.Display.LOGIN,
size=30,
weight=ft.FontWeight.BOLD,
),
alignment=ft.alignment.center,
)
# ユーザーID入力エリア作成
self.id_TextField = ft.TextField(
label=ft.Text("ユーザーID", size=18), bgcolor=ft.Colors.WHITE, text_size=18
)
# パスワード入力エリア作成
# password=Trueで入力した値がマスクされるように設定
self.password_TextField = ft.TextField(
label=ft.Text("パスワード", size=18),
password=True,
bgcolor=ft.Colors.WHITE,
text_size=18,
)
# ログインボタン作成
# ボタンクリック時にlogin_submit_clickを呼び出す
self.submit = ft.FilledButton(
content=ft.Text("ログイン", size=18),
width=100,
height=40,
on_click=lambda e: Login.login_submit_click(self),
)
# controlに作成したコントロールを追加する
# ユーザーID入力エリア、パスワード入力エリア、ログインボタンは縦並びかつ枠線内にあるデザインにするため
# ft.Container内にft.Column(縦並び)で配置し、ft.Containerに枠線を設定する
control = [
ft.Column(
controls=[
self.display_label,
ft.Container(
content=ft.Column(
controls=[
self.id_TextField,
self.password_TextField,
self.submit,
]
),
border=ft.border.all(2.0, ft.Colors.BLACK),
padding=20,
),
],
expand=True,
),
self.overlay,
]
# ウィンドウサイズと表示位置を設定
arg_page.window.width = self.config.window_size.login.width
arg_page.window.height = self.config.window_size.login.height
CommonMethod.center_non_update(arg_page)
# "/login"が呼び出された時にcontrolが表示されるように設定
super().__init__("/login", control)
def login_submit_click(self):
"""
ログインボタンクリックイベント
"""
# 画面を非活性にする
self.overlay.visible = True
self.update()
# idにユーザーIDを代入する
id = self.controls[0].controls[1].content.controls[0].value
# idの入力値チェック
if id == "":
msg = My_Control.Msgbox(
"HAB005C",
Message.Message_Box.HAB005C.format("ユーザーID"),
)
# 自作コントロールのメッセージボックスをログイン画面上に表示する
self.page.open(msg)
# 画面を活性にする
self.overlay.visible = False
self.update()
return
# passwordにパスワードを代入する
password = self.controls[0].controls[1].content.controls[1].value
# passwordの入力値チェック
if password == "":
msg = My_Control.Msgbox(
"HAB005C",
Message.Message_Box.HAB005C.format("パスワード"),
)
# 自作コントロールのメッセージボックスをログイン画面上に表示する
self.page.open(msg)
# 画面を活性にする
self.overlay.visible = False
self.update()
return
# ログインアダプターを使用し、ログイン認証を行う
# user_rowにはユーザー情報、ログイン失敗メッセージが代入されている
user_row = self.login_adapter.login(
id,
password,
)
# user_row.return_rowにユーザー情報がない場合
if user_row.return_row is None:
# user_row.return_message_boxに代入されたメッセージ情報を
# 自作コントロールのメッセージボックスに渡しインスタンス化
msg = My_Control.Msgbox(
user_row.return_message_box.message_id,
user_row.return_message_box.message_text,
)
# 自作コントロールのメッセージボックスをログイン画面上に表示する
self.page.open(msg)
# 画面を活性にする
self.overlay.visible = False
self.update()
else:
# self.page.dataにユーザー情報を代入し、どの画面でもユーザー情報を参照できるようにする
self.page.data = user_row.return_row
# 家計簿一覧画面を表示する
self.page.go("/HAB_list")
全体コード(GitHub)
household_account_book/display/login.py at main · SakumaTakayuki/household_account_book
Contribute to SakumaTakayuki/household_account_book development by creating an account on GitHub.