kuroの覚え書き

96の個人的覚え書き

python virtualenvふたたび

SQLMySQLにしてflaskから使いたいわけだけど、やはり一足飛びに行こうとすると色々わからないことが出てくるわけで、まずはwebの表示周りからきちんと理解して押さえていくことにする。ねっとの情報は色々役に立つが、やはり系統立てて理解するにはバラバラすぎるので、O'REILLYのFlask Web Developmentに従って学習しようと思う。日本語情報があればいいのだけど、どうもこれというものがまだないらしいので英語書籍を紐解く。

まずはpythonのvirtualenvをpython3環境に作る。

$ pip3 install virtualenv
でインストールし
$ git clone https://github.com/miguelgrinberg/flasky.git
としてExample codeを取り込めるようにすると、flaskyというディレクトリができる。
flaskyディレクトリに移り、
$ virtualenv venv
としてvenvという仮想環境を作る。
この中で作業を進めていくことになる。(実際はこの中に色々ファイルがインストールされていくだけでpythonスクリプトはどこをルートにしてもいいようだ。)
venvに入るには
$ source venv/bin/activate
とし、環境から出るときは
(venv)$ deactivate
とすればよい。

先日作成したhello.pyの
@app.route('/')から3行分について

@app.route('/user/<name>')
def user(name):
   return '<h1>Hello,%s!</h1>' % name

と書き換えてやり、アプリを起動し、
http://127.0.0.1:5000/user/hoge
にアクセスすると

Hello, hoge!

と表示されることがわかった。

さて、ここでどういう処理がされているのか理解しておきたい。
クライアントからのリクエストを処理する時urlを読んで処理を分岐しているようだ。
そのためにapp.routeデコレーターでurlの設定をやっていて

(venv) $ python
>>> from hello import app
>>> app.url_map
Map([<Rule '/' (OPTIONS, HEAD, GET) -> index>,
 <Rule '/static/<filename>' (OPTIONS, HEAD, GET) -> static>])

という感じにリクエストのurlにルールが設定されるようだ。
@app.route('/')
@app.route('/user/')
の両方があったなら

(venv) $ python
>>> from hello import app
>>> app.url_map
Map([<Rule '/' (OPTIONS, HEAD, GET) -> index>,
 <Rule '/static/<filename>' (OPTIONS, HEAD, GET) -> static>,
 <Rule '/user/<name>' (OPTIONS, HEAD, GET) -> user>])

こうなるわけだね。
staticがどういう動作になるかはまだ知らない。