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にエラーメッセージ表示部追加。