2歩戻ったら2.5歩進みたい

関東で働くweb developerのブログ

「Pythonでwebサービスを作る」学習メモ 1巻①

どうもこんにちは。きゃにすたーです。

この記事は「Pythonwebサービスを作る」でwebサービスを作っている時の学習メモその①です。自分の中で整理するため、ざっくりとした内容&詰まったところなんかを書いていきます。

全3巻中の1巻が終わったところですが、非常にわかりやすかったです。しかもkindle unlimitedで今ならタダ。マジかよ。全国のweb業界ワナビーはこれで勉強しましょう。出版されたのが非常に最近で、3巻では最終的にHerokuでデプロイするところまで書いてくれています。

ソースはこちらに上げております。

github.com

早速見ていきましょう。

環境構築

仮想環境の立ち上げでさっそく詰まりました。ひぃー。

$ python3 -m venv myenv

これで仮想環境を作るのですが、

$ python3 -m venv myvenv
Error: Command '['/path/to/myvenv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1

なんかpipが無いって言われてるみたいですね。下のブログを参考にしたら解決しました。

[小ネタ] Pythonでvenvが動かない!そんなときは!?

具体的には下記のコードで解決しました。

$ python3 -m venv --without-pip myenv

参考にしたページだとこの後setuptoolsを入れてpipを入れ直してってしないといけないはずなんですが、僕の環境だと普通にpipできました。 環境によっては上手くいかないんですかね…ご存知の方がいらっしゃったらご教授ください。

問題なくmyenvができたらアクティベートします。

$ source bin/activate

ルーティング

アクセスされたアドレスによって処理を振り分けることをルーティングと言います。現時点ではローカルサーバーで動かしているので基本のアドレスは http://localhost:5000です。

なので、ルーティングする時は

@app.route("/")

と書けば、この下の処理は http://localhost:5000にアクセスされた時の処理になります。 なので、http://localhost:5000/hogeにアクセスした時の処理は以下のようにすれば良いです。

@app.route("/hoge")

テンプレートエンジン

pythonフレームワークであるFlaskにはjinja2というページを表示するためのテンプレートエンジンが備わっています。pythopnは直接 htmlを扱うのが苦手なので、それに特化したフレームワークを使っています。

具体的な書き方

基本的な形はこんな感じです。

from flask import Flask,render_template 

app = Flask(__name__)

@app.route("/") # アクセスした時の処理
def index(): 

return render_template("index.html") # index.htmlを表示する

また、アドレスの文字列をhtmlに渡す際は、以下のように書きます。

@app.route("/title/<title>")
def title(title):

return render_template("index.html",title=title)

この場合だと、http://localhost:5000/title/hogeにアクセスされた時、"hoge"が引数としてindex.htmlに渡されます。

そして、index.html内でtitleを出力するには以下のようになっている必要があります。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8"/>
 </head>
 <body>
  <h1>{{title}}</h1>>
 </body>
</html>>

これで本文にhogeが表示されます。

1巻の内容はまだ半分ぐらいなのですが、思ったより長くなりそうなので一旦このあたりで切りたいと思います。

続きはこちら!

canisterism.hatenablog.com