合言葉は「メルヘン」ゆってごらん

d:id:imait:20090210:1234266258のSession、d:id:imait:20090210:1234266815のHTMLを試すためのコードも公開しておきます。

Sessionはsession.pyというファイルにして、HTMLはhtml.pyというファイルにして、libというディレクトリに放りこみます。また、SQLiteのファイルを置いておく、dbというディレクトリも作っておきます。

あとは適当にパーミッションを設定したら動きます。ええと、私はこのファイルをindex.pyという名前で動かしてましたが、どんな名前でも動くはずです。

試す人はいないと思うけど、というか読んでる人いるかどうかもあれだけど、まあ一応公開するだけしときます。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
test code
'''

import codecs
import string
import cgi
import cgitb; cgitb.enable()
import sys
import locale
import datetime
import Cookie
import os

import pickle
import base64

sys.path.append('./lib/')
import html
import session


locale.setlocale(locale.LC_ALL, '')
sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)

sitetitle = u'サイト名'
html = html.HTML(encode=u'utf-8', lang=u'ja', sitetitle=sitetitle)
html.set_page_title(u'ページ名')

cookie = Cookie.SimpleCookie(os.environ.get(u'HTTP_COOKIE', u''))
sesid = u''
if cookie.has_key(u'session'):
    sesid = cookie['session'].value

validity = u'15 minutes'
mys = session.Session(u'./db/session', sesid, validity, True)

if sesid == mys.get_id():
    form = cgi.FieldStorage()
    if form.has_key(u'delete_key'):
        mys.delete()
        html.print_resp_header()
        html.print_html_header()
        print(html.p(u'鍵を捨てました。'))
    else:
        cookie['session'] = sesid
        html.set_cookie(cookie)
        
        c_vals = mys.get_data()
        if not isinstance(c_vals, list):
            c_vals = []
        if form.has_key(u'c_val'):
            c_val = form.getvalue(u'c_val', u'')
            c_val = c_val.decode('utf-8')
            c_vals.append(c_val)
            mys.set_data(c_vals)
            mys.save_data()
        
        html.print_resp_header()
        html.print_html_header()
        print(html.p(u'鍵は有効です。'))
        print(html.p(sesid))
        print(u'<dl>')
        print(u'<dt>鍵の有効期間</dt><dd>' + validity + u'</dd>')
        print(u'<dt>鍵の作成時刻</dt><dd>' + mys.get_created_time() + u'</dd>')
        print(u'<dt>最終アクセス時</dt><dd>' + mys.get_accessed_time() + u'</dd>')
        print(u'<dt>鍵の廃棄時刻</dt><dd>' + mys.get_expire_time() + u'</dd>')
        print(u'<dt>前回アクセス時のリモートアドレス</dt><dd>' + mys.get_remote_addr() + u'</dd>')
        print(u'</dl>')
        print(html.p(u'時間帯はGMTです。'))
        print(u'''
        <form method="post" action="index.py">
        <input type="hidden" name="delete_key" value="bye" />
        <p><input type="submit" value="鍵を捨てる" /></p>
        </form>    
        ''')
        print(u'''
        <form method="post" action="index.py">
        <p>セッションにデータを追加 : 
        <input type="text" name="c_val" />
        <input type="submit" /></p>
        </form>
        ''')
        if len(c_vals) > 0:
            for cv in c_vals:
                print(html.p(cv))
else:
    form = cgi.FieldStorage()
    seikai = u'メルヘン'
    if form.has_key(u'aikotoba'):
        aikotoba = form.getvalue(u'aikotoba', u'')
        aikotoba = aikotoba.decode(u'utf-8')
        if aikotoba == seikai:
            cookie['session'] = mys.get_id()
            html.set_cookie(cookie)

            html.print_resp_header()
            html.print_html_header()
            print(html.p(u'鍵がわたされました。'))
            print(html.p(u'ページを更新してください。'))
        else:
            html.print_resp_header()
            html.print_html_header()
            print(html.p(aikotoba + u'は正しい合言葉ではありません。'))
    else:
        html.print_resp_header()
        html.print_html_header()
        print(html.p(u'合言葉は' + seikai))
        print(u'''
        <form method="post" action="index.py">
        <p><input type="text" name="aikotoba" id="aikotoba" value="" />
        <input type="submit" /></p>
        </form>
        ''')

print(u'''
<form method="post" action="index.py">
<p><input type="submit" value='ページの更新'/></p>
</form>
''')

print(html.p(u'REMOTE_ADDR : ' + os.environ.get('REMOTE_ADDR', u'')))
print(html.p(u'REMOTE_HOST : ' + os.environ.get('REMOTE_HOST', u'')))

html.print_html_close()