app.yaml
|
先頭のApplication ID は、各自GAE登録時に設定した Application Identifier を設定して下さい。
最後の message.py が今回のpython プログラムです。 |
index.html
|
% for message in msbg %}
から
{% endfor %}で、python プログラムから受け渡されたデータ N件分繰り返して html の生成をしています。
{{ ○○ }} はpython プログラムから渡されたデータ名(○○)になります。
|
message.py
|
2行目 #! -*- coding:utf-8 -*- は、# -*- coding:utf-8 -*- でも動きます。
(どちらが正しいか不明)
実際のデータを登録するデータ定義
class MessageBord (db.Model):
owner = db.StringProperty(multiline=True)
content = db.StringProperty(multiline=True)
createDT = db.StringProperty(multiline=True)
owner :登録した登録者名を保存する領域(画面入力)
content :検索対象となる文字列を保存する領域(画面入力)
createDT:登録日時を設定(自動設定も可能ですが、ここではあえて日時を設定しています)
索引データを登録するデータ定義
class MessIndex (db.Model):
seldata = db.StringProperty(multiline=True)
site = db.StringProperty()
seldata :N-GRAM で設定するキーとなる文字列を保存(検索の際のキーとなる)
site :MessageBordに登録されたデータの実際のキー(登録時に自動設定されるキー値)
--------------------------------------------------------------------------------------------
MesSave のClass
Def post(self)
画面から "post" で起動された場合に動く処理
messagebord.content = re.sub(" ", "", self.request.get('content'))
nichiji = datetime.datetime.now() + datetime.timedelta(hours=9)
messagebord.createDT = nichiji.strftime("%Y/%m/%d %H:%M:%S")
re.sub(" ", "", self.request.get('content'))で、空白データを削除しています。
nichiji = datetime.datetime.now() + datetime.timedelta(hours=9)
nichiji.strftime("%Y/%m/%d %H:%M:%S")で、現在日時を取得し、9時間進めてから編集しています。
本来は処理している地域により編集すべきでしょうが、地域と時間差は日本固定にしています。
messagebord.put()
ここでMessageBord にデータを書き出しています。
keysite = messagebord.key()
wk_cnt = 0
wk_area = messagebord.content
while wk_cnt < len(messagebord.content) :
messindex = MessIndex()
messindex.seldata = wk_area[wk_cnt:]
messindex.site = str(keysite)
messindex.put()
wk_cnt += 1
messagebord.put() で書き出した際のキーを keysite に設定します。
messindex = MessIndex() で出力する MessIndex の名前(messindex)を定義します。
ここで毎回定義しないと、最後の1件しか出力されません。
出力するキー部分(seldata)に、画面入力したデータ(content)の1桁目から最後まで、
2桁目から最後までと、whileの数だけ(長さ分だけ)設定します。
messindex.put() で、索引データの出力になります。
--------------------------------------------------------------------------------------------
MainProc のClass
messagebord_query = MessageBord.all().order('-createDT')
msbd = messagebord_query.fetch(10)
db.Gqlquery と対をなすアクセスで、createDT の降順に全件取得する
とはいいながら、先頭の10件のみをfetch(実取得)し、msbd のリストに入れる
fetch(10) を取れば、全件表示になります。
template_values = { 'msbd': msbd }
画面(テンプレート)に取得したデータリスト msbd(右側) を画面系のhtml に
msbd(左側)という名前で渡す。
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
ここで画面系の出力を行う、テンプレートを使用し、index.html を起動
--------------------------------------------------------------------------------------------
application = webapp.WSGIApplication([('/', MainProc),('/save', MesSave)],debug=True)
起動が、/ の場合(最初)は、MainProcを実施する。
起動が、/save の場合(画面から)は、MesSaveを実施する。
-------------------------------------------------------------------------------------------- def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
if __name__ == "__main__": が最初に動く箇所で、main を呼出す
main の内容はよく判らない(笑)python の標準?
|
 |
 |
|