GAEO de お小遣い管理(2)
前回から引き続き、GAEO de お小遣い管理を作っていきます。
まず事前準備。
ページテンプレート「base.html」の確認
全てのページのベースとなる base.html を設定します。
場所は「/SaveMoney/application/templates」の直下。
以下な感じで書けてればOKですが、「UTF-8」で保存することを忘れないで下さい。
# 自分が忘れて文字化けに悩んだのでw
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel=stylesheet type="text/css" href="/css/style.css" /> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body> </html>
定数クラスの用意
今回のツールでは、あとで拡張し易いように
テーブルの項目名を定数で保持してます。
・・・だって、テーブル項目名間違うと
エラーも出ない上にデータも出ないので悲惨なんですよ・・・w
プロジェクトディレクトリ「SaveMoney」直下に、
「const.py」というファイルを作って、以下の内容を記述します。
# -*- coding: UTF-8 -*- # 列名:ユーザ情報 class CstUserCol: USER_ID = 'userID' USER_NM = 'userNM' PASSWORD = 'Password' UPD_DATE = 'upddate' # 列名:項目情報 class CstItemCol: USER_ID = 'userID' ITEM_ID = 'itemID' ITEM_NM = 'itemNm' ORDER_NO = 'orderNo' # 列名:出納帳 class CstMainCol: USER_ID = 'userID' IN_OUT = 'inout' ITEM = 'item' YEN = 'yen' MEMO = 'memo' UPD_DATE = 'upddate'
こんな感じ。あんまり使う機会ないですけどねw
では、本番ー。
ログイン画面「SaveMoney」
ログイン画面を作成します。まず index.html から。
場所は「/application/templates/savemoney/」の直下です。
ユーザ名・パスワード欄と、ユーザ登録へのリンクをつけるだけ。
{% extends "../base.html" %} {% block title %}おこづかい管理{% endblock %} {% block content %} <h1>おづかい管理</h1> <form action="/savemoney" method="post"> <fieldset> <legend>ログイン</legend> <label>ユーザ名 :</label> <input type="text" name="userName"><br> <label>パスワード:</label> <input type="password" name="passwd"><br> <input type="submit" value="Login"> </fieldset> </form> <p> {% if login %} <h2>ログイン成功</h2> {% else %} <h2>ログインしてください。</h2> <p><strong>{{ errMsg }}</strong></p> <a href="/user">ユーザ登録</a> {% endif %} </p> {% endblock %}
続いて「savemoney.py」。認証処理を作ります。
場所は「/application/controller」の直下。
# -*- coding: UTF-8 -*- import logging from google.appengine.ext import db from gaeo.controller import BaseController from model.savemoney import Savemoney from model.user import User from const import CstUserCol class SavemoneyController(BaseController): def index(self): # 入力チェック errMsg = "" checkInput = False if len(self.params) < 2: errMsg = '画面遷移エラー' elif self.params.has_key('userName') is False: errMsg = '' elif self.params.has_key('passwd') is False: errMsg = '' elif len(self.params['userName']) == 0: errMsg = 'ユーザ名が未入力です' elif len(self.params['passwd']) == 0: errMsg= 'パスワードが未入力です' else: checkInput = True if checkInput is False: self.login = False else: # 入力取得 userNm = self.params['userName'] passwd = self.params['passwd'] # User と照合 dat = User.all() dat.filter(CstUserCol.USER_NM + " = ", userNm) dat.filter(CstUserCol.PASSWORD + " = ", passwd) hitCount = dat.count() if hitCount == 1 : self.login = True # userID 保持 for user in dat : userID = user.userID else : errMsg = 'ユーザ名とパスワードが一致しません。' self.login = False if self.login == True : # ログイン成功したら入力画面へ遷移 self.session[CstUserCol.USER_NM] = userNm self.session[CstUserCol.USER_ID] = userID self.session.put() self.redirect('/smmain') else : # ログイン出来なければエラーメッセージ表示 self.errMsg = errMsg
どうにも処理が汚いんですよね・・・。
まだまだ改善の余地があると思います。
次回はユーザ情報管理「User」を先にやります。
-
- -
8/7 指摘を得ましてプログラムちょこっと修正。
8/11 再度プログラム修正。
・samemoney.pyに入力チェック追加。
・index.htmlにエラーメッセージ表示部追加。