お題の回答例です。
回答例のフルソース:http://files.getdropbox.com/u/261861/kaepy.zip kae.pyだけを見る(推奨):http://gist.github.com/145613 変更した部分
kae.py解説まず代表的な部分から。
だけを解説します。 無駄なところがあるかもしれませんがご了承を。 ランダムな文字列を生成する(random_str関数)まずはkae.pyの10行目をdef random_str(): return ''.join([random.choice(string.ascii_letters+string.digits) for i in range(10)]) これ超絶簡単ですね。 空の文字列に,joinでリストを連結します。 連結するリストは、リスト内包表記でこのように展開されます。 a = [] for i in range(10): a.append(random.choice(string.ascii_letters+string.digits)) ''.join(a) random.choiceは、渡された文字列から1つ文字を選びます string.ascii_lettersはa-zA-Z string.digitは0-9 の文字列です。 それらを会わせたa-zA-Z0-9の文字列から、1つを選んでくっつけます。 ['a','1','Z','p','o','1','2','q','2','b'] こんな感じに鳴る訳ですね。 それを、文字列にくっつけたものをreturnします。 ページ作成部分(CreatePageクラス)kae.pyの75行目を。postメソッドで普通に作成するのですが、 Pageのパラメータにurlidというのが増えています。これがユニークな文字列を格納するためのプロパティです。 modelにもそうありますね。 そこにいれているのが random_str()+time.strftime("%s") ランダムな文字列にUNIX秒的なものをくっつけて入れています。 重複防止です。UNIX病なら重複しないので。 そしたら、put()で保存して、 urlidを/entryに渡して、終了。 Pageを取得する(get_page関数)kae.pyの12行目を。これでページを取得してやります。 もしもurlidがなければ(GETパラメータを直接渡すので)、Falseを返却します。 まず、Page.all()ですべて取得し、filterでフィルタをかけます。 もちろんfilterは、渡されたidと、dbに記録されたurlidと一緒か?です。 それで、もしもfilterした結果が0以下なら Falseを返します。 そして、それ以外なら、1番目の結果をかえします。重複することはないのでまあ大丈夫でしょう. ページをランダムに選ぶ部分(RandomPageクラス)これは簡単です。まず、登録されているページ数を数えて、qに代入 1-qの整数で乱数を生成して、モデルのget_by_idメソッドでページを取得、それのurlidを取得して /entryにurlid付きでリダイレクトします。 まとめこっちもお題を出して、締め切り2日前に急ピッチで作ったがとても早く実装できた!! いろいろ汚いけど動くからおk セキュリティとかかんがえてないよ! 某氏から、Tropyに固有なWeb2.0っぽいid持たせるなんて・・・ とか言われたけど気にしないw 以上。ありがとうございました。 --- ソラ(sorah) sora134[at]gmail.com http://codnote.net/ |