python-blog-systemに予約投稿機能を実装しました。
記事一覧表示
1 2 3 4 5 6 | entries = Entry.all().order("-datetime") if not users.is_current_user_admin(): entries = entries.filter("datetime <", datetime.datetime.now()) entries = entries.fetch(step + 1, page * step) for entry in entries[:step]: printEntry(self, entry) |
entry.datetime(記事の公開日時)が、現在時刻よりも古いものだけを取り出すようにしました。RSSも同様の修正をしています。
記事投稿
フォームの表示では、entryのdatetime属性を、フォーマットして表示するようにしました。
1 2 3 4 5 6 7 | self.write(u"""<form method="post" action="/post/%(key)s"><input type="hidden" name="phpMyAdmin" value="cfc2644bd9c947213a0141747c2608b0" /> <h2>タイトル</h2><input type="text" name="title" value="%(title)s" style="width:400px"/> <h2>本文</h2><textarea name="body" style="width:400px;height:300px;">%(body)s</textarea> <h2>タグ</h2><input type="text" name="tags" value="%(tags)s" style="width:400px"/> <h2>公開日時</h2><input type="text" name="datetime" value="%(datetime)s"style="width:400px;"> <h2>画像 [<a href="/uploader?phpMyAdmin=cfc2644bd9c947213a0141747c2608b0" target="_blank">uploader</a>]</h2> <div>%(deleteButton)s<input type="submit" value="submit"/></div></form>""" % {"key" : key, "title" : entry.title, "body" : entry.body, "tags" : entry.tagStr(),"datetime" : entry.datetime.strftime('%Y-%m-%d %H:%M:%S'), "deleteButton":deleteButton}) |
保存処理では、datetime.datetime.strptimeを使って、文字列をdatetimeに変換するようにしました。
1 2 | entry.datetime = datetime.datetime.strptime(self.request.get("datetime"), "%Y-%m-%d %H:%M:%S") entry.put() |
まとめ
ほんの数行のソースコードの追加で日時指定での記事公開を実装できました。管理者向けの例外処理を含めて、ソースコードの増分は、たったの7行でした。