Hatena::ブログ(Diary)

Computingしようぜ!

2010-04-29

Flask - 3rd Attack - Quickstart - Rendering Template~

11:23

Flask@DebianとPythonしようぜ!

Flaskもういちど@DebianとPythonしようぜ!

に続き僕のFlaskへのサードアタックが始まった。もう一度警告を再括しておこう。

僕は右も左もわからないさっきPythonをはじめたばかりの初心者なんでこのページを見に来た人はオフィシャルにいきましょう。Warning!僕は今自分が何をやっているのかすらわかっていません。

まずFlaskとは関係なくここ最近PythonやDebian周りのWebめぐりをしていて、lessっていうコマンドが使えることに気づいた。というか、なんか使ってる人がいたのでこれから真似てみることにする。後々ぐぐったりしてmoreコマンドとlessコマンドとcatコマンドとPager?とかいうのの違いやらトレンドを調べてみたい。ちなみにmoreと同じようにqで抜けられる。この辺はmanとかinfo(GNU形式だったな)を読めばあるんだろうな。

http://blog.extracheese.org/2010/04/a-raw-view-into-my-unix-hackery.html

ここからか。

ちなみにWebめぐりをしている最中にJikyllというブログエンジンというか、テンプレートに合わせて生成してくれるようなのを見つけてそれに触発されてまたFlaskにチャレンジしようとしている。Jekyll導入メモにも触発された。綺麗なページだしね。それに下の参考リンクBlogging Like a Hackerもなかなかアレな僕を釣るのには十分な題名だった。ただJikyllはRubyエンジンだ。負けるわけにはいかない。何が

その辺をFlaskでとにかくやってみたいなぁと。そういうわけですはい。

さぁ、前置きが長くなったが、続きからいこう。Flask DocumentationのQuickstartの項目を読んでいる続きで、Rendering Templatesの項目まで進んでいる。そこからだ。

まず、Flask Documentationを進めるにつれ作ったmyprojectのディレクトリにもぐり、source env/bin/activate 実行。virtualenv環境に。

renderingTemplates.pyというファイルを作り。内容はこれ。

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello/')
def hello(name=None):
    return render_template('hello.html', name=name)

if __name__ == '__main__':
    app.run()

templatesというディレクトリをrenderingTemplates.pyと同じディレクトリに作成するというFlask Documentationの一番目の例と同じ構造をとってみる。そしてその中にhello.htmlというファイルをexample templateと同じように作ってみた。これで、python renderingTemplates.pyとやると動く。アドレスより直接アクセスする。/のIndex Pageより/hello/に移動。表示が出る。OK.ちなみに、一度hello.htmlというテンプレートファイルなしで、上記のrenderingTemplates.pyだけを起動した後に、テンプレートファイルを作って起動しようとすると、そのようなものはもう既に起動しているというエラーが発生する。どこまで遡ればいいのかまたどう対処すればいいのかわからなかったので、とりあえずTerminalをexitで終了させてもう一度sourceからやり直して成功した。Jykyllをやってみようと割と色々見てみたので、その辺の体験が以前よりFlaskがどう動いているのかの理解に役立っているような気がしている。もっとわからなくなったらDjangoの勉強に移行すればFlaskもよく理解できるようになるだろう。本当にFlask Documentationに歯が立たなくなったときはそうしてみることにする。日本語ではドキュメントは少ないらしいし、いくつかは本出てPython周りにしては本多い方だと思うけど、まぁ、むしろ英語でDjangoを学ぶ選択肢の方が強いのでチャレンジもあるだろうか。

とりあえずJykyllとFlaskの違いはJykyllはただテンプレートにあわせてフィルター掛けてページを生成してる感じなのに対して、FlaskはPythonも実行できるっぽいところかなぁ。ようわからんが、ウェブフレームワークってそういうことでしょ。

Accessing Request Data

なんかここは適当な理解でいいらしいのでさらっと読んだ。

The Request Object

ようわからんが、APIってのがFlaskで重要な部分を占めてるっぽいなぁ。TwitterとかでAPIってのは知ってるが、外部から使うものとばかり思っていたが、そうでもないんか。Wikipediaでぐぐらんとなぁ。

なんかこれも実行しようとするとエラーでてまうなぁ。うーむ。

File Uploads

も...とかついてるんで実行は諦めた。というか、関数っていうかファンクションになってるあたりに何かヒントがあるのか。どうなんだ。少しずつわかってきたようなきもするけど何も判ってないような気もするwてか×チュートリアル、○クイックスタート読んでてこれはやばいだろってレベルw

Cookies

こんな高度なもんほとんど使わないだろうなぁ。

Redirects and Errors

これ例文を打ち込んでみたんだけど、上の方の部分と、下の部分がないとappなんてのはnot definedだよって返ってきた。importだ関数だてんこ盛りで俺には何がなんだかわからないが、それでも多少わかってきたようなわかってきてないような感じだが、とりあえずおまじないとしてやり過ごす。ちなみにこれで一応動く。おーすげーという感じ。

from flask import Flask, abort, redirect, url_for
app = Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for('login'))

@app.route('/login')
def login():
    abort(401)
    this_is_never_executed()

if __name__ == '__main__':
    app.run()

Sessions

これも適当に上に前回の+requestとか必要そうなのと下を付け加えて、書いてみたんだが、logoutが通らないだけでフォームとかloginとか出来て感動した。

TypeError: 'NoneType' object is not callable

とかlogoutのページに手打ちで行くと出てきてしまう。

Message Flashing

これも割と適当に読んだ。

てか、Flaskのドキュメント読んでると、気づいたけど、Jykyllの時にもあったけど、ソースファイルがテキストであるから、これもなんとかこの形で持っていけると思うんだよなぁ。とりあえずソースファイルがテキストで、それをHTMLに変換出来て乗せられる感じがいいなぁってJykyll読んでて思ったわけで。フレームワークとか正直どうでもいいわけでwなんかデータベースとかファイルのアップロードとかユーザのログインとか色々あるみたいだけどwならFlaskに拘るなよと思いつつもとりあえず読んでいる。いや、本当になんなのかわからずにとりあえずで色々書いてるけど本当に情報をあてにしている人にはでぶりで申し訳ない。勉強中なので許して欲しい。

トラックバック - http://d.hatena.ne.jp/debiandebian/20100429/1272507819