一日一膳(当社比)

RとJavaと時々数学

Flaskで,Webサイトを構築するtutorial

(この行を消して、ここに「迷い」と「決断」について書いてください)

 

目次


flaskアプリケーション

 flaskとは,Python(version 3.4以降)上で動作するWebアプリケーションフレームワークである.本記事では,flaskのチュートリアルを実行した結果をのメモを紹介します.

flaskの得意とするところは,小規模Webサイトの構築です.「Pythonで作成した,バッチアプリケーションをWeb上で公開したい!」みたいな場合にうってつけでしょう.

動作環境


Hello worldをブラウザ出力する

まずは,Hello Worldをブラウザ出力するアプリケーションから始めましょう.まず,Flaskをpipコマンドでinstallしてください.flaskアプリケーションを構築するには,ブラウザからのhttpリクエストを処理し,レスポンスを生成する関数をpythonファイルに記述する必要があります.それでは具体的な説明を開始します.

 まず,test_appディレクトリ(名前はどうでもよい)直下にpythonファイル(今回はapp.py)を作成します.app.pyの内容は次の通りです.

app.py

#flask application
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"
 
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080)

アプリケーションを起動するには,CLI上で

C:(workspaceディレクトリ)\test_app> python app.py
python : * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

と叩けば,サーバーが起動します.

URL http://localhost:8080/

にブラウザアクセスすれば,画面上に「Hello World!」と表示されます. 


jinja2テンプレート

さて,「Hello World!」ができたら,htmlファイル出力をしてみましょう.今回は,janja2というテンプレートを利用してhtmlを返してみます.jinja2を利用するには,pipコマンドでjinja2ライブラリをinstallしておきましょう.jinja2テンプレートは,動的なhtml生成機能を実装するのに有効です.準備として返したいhtmlファイルをtest_app下に作成したtemplatesディレクトリに置いておきます.ディレクトリ名は,必ずtemplatesとしてください.今回は,httpレスポンスとして,templatesディレクトリ下の次のindex.htmlを返してみます.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<p>普通の出力です.</p>
<!--content generated by app.py-->
<h2>{{ message }}</h2>
<table >
<tr>
<th>作品名</th>
<th>メッセージ</th>
</tr>
{% for key, value in favorite.items() %}
<tr>
<td>{{key}}</td>
<td>{{ value}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>

このファイルを出力するpythonファイルの内容は,次の通りです.

#flask/jija2
from flask import Flask, render_template#, request, redirect
from jinja2 import Environment, FileSystemLoader
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"
 
@app.route("/index")
def index():
message = "これは,app.pyのメッセージです"
 
#dictionary
favorite = {}
favorite["もののけ姫"]="そなたにサンが救えるか"
favorite["ハウルの動く城"]="ソフィー,風呂場の棚いじった?"
favorite["天空の城ラピュタ"]="いい子じゃないか,守っておやり"
 
html = render_template('index.html', message = message, favorite = favorite)
 
return html
 
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080)

サーバー起動の方法は,Hello Worldアプリケーションと一緒なので省略します.

URL http://localhost:8080/index

にアクセスすれば,index.htmlの内容が出力されます.

注目するポイントは,

  • index.htmlないに{{ 変数名 }}と書いておいて,app.py内で変数の値を入力することができる.
  • 辞書型配列(app.pyのfavorite)は,index.html内の {% for key, value ~ {% end for %}でloop出力できる.

でしょうか.他にjinjaテンプレート内でリストのloopを処理したりもできるので興味がある方は調べてみてください.


css装飾

cssで装飾するには,cssファイルをtest_app下のstaticフォルダに置きます.次のstylesheet.cssは,単に背景色を青色にするcssファイルです.

stylesheet.css

body{
background-color: aquamarine;
}
 
jinja2内でcssを反映させるには,htmlファイルのヘッダを変更します.例えば,index.htmlの場合はヘッダを
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="{{ url_for('static', filename='stylesheet.css') }}">
</head>
とすれば,背景色が変更されます.

まとめ

今回は,flask + jinja2で単純なwebサイト構築をメモとしてまとめてみました.今回の知識とpostリクエスト,そしてpythonによるDB操作程度の知識があれば掲示板のアプリケーションが作れるので,tryしてみようと思います.


参考URL