「Pythonでwebサービスを作る」学習メモ 1巻①
どうもこんにちは。きゃにすたーです。
この記事は「Pythonでwebサービスを作る」でwebサービスを作っている時の学習メモその①です。自分の中で整理するため、ざっくりとした内容&詰まったところなんかを書いていきます。
PythonでWebサービスを作る - Python3 + Flaskで作るWebアプリケーション開発入門 - その1
- 作者: 中野仁
- 発売日: 2018/02/24
- メディア: Kindle版
- この商品を含むブログを見る
全3巻中の1巻が終わったところですが、非常にわかりやすかったです。しかもkindle unlimitedで今ならタダ。マジかよ。全国のweb業界ワナビーはこれで勉強しましょう。出版されたのが非常に最近で、3巻では最終的にHerokuでデプロイするところまで書いてくれています。
ソースはこちらに上げております。
早速見ていきましょう。
環境構築
仮想環境の立ち上げでさっそく詰まりました。ひぃー。
$ 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巻の内容はまだ半分ぐらいなのですが、思ったより長くなりそうなので一旦このあたりで切りたいと思います。
続きはこちら!