はじめに
今回はweb開発について話したいと思います。自分でも初心者ですので、間違ったところがあれば、ご了承ください。
flaskとは
python用の軽量web application フレームワークです。Werkzeug WSGIツールキットとJinja2テンプレートエンジンを基に作られています。
flaskをpythonにinstall
#pip install
pip install Flask
#conda install
conda install -c anaconda flask
どっちでもいいですが、anacondaを使っているのなら、conda installをお勧めします。
flaskの基本構文
@app.route()はflask関数ごとに必要です。
普通の関数ならapp=Flask(name)の前に定義します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
hello = "Hello world"
return hello
if __name__ == "__main__":
app.run()
実際にやってみましょう
htmlとflask両方必要
htmlを表示
HTMLを反映させるにはHTMLファイルをtemplatesフォルダに入れておく必要があります。(templatesを自分で作成すればいいです。)
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello():
html = render_template('index.html')
return html
if __name__ == "__main__":
app.run()
pythonからhtmlに値渡す(jinja2)
jinja2はpythonからhtmlに値を渡すための記法です。
書き方としては{{}}に渡したい変数を書きます。
if文とfor文は必ずいるわけではありませんがif文を書いたほうがエラーが生じないはずです。(値を渡せなかった場合)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>HELLO</title>
</head>
<body>
<div class="container">
<div class="header">
<h3 class="text-muted">Sample Page</h3>
{% if hello %}
<p>{{hello}}</p>
{% endif %}
</div>
</div>
</body>
python側にはその変数の値を指定し、レンダリングすれば渡せます。
@app.route('/')
def hello():
hello = "Hello world"
html = render_template('1.html',hello=hello)
return html
htmlからpythonに値を渡す(get/post)
ここでgetとpost二つの方法があります。
まずこれら方法を使うために、requestをimportする必要があります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>HELLO</title>
</head>
<body>
<form action="/hello" method="get">
<button type="submit" name="a" value="a">nice to meet you</button>
<form/>
</body>
</html>
まずhtmlの構文を見てください。formタグの中にactionがあります。これが例のボタンを押すと、flask側の@app.route('/hello')下の関数が動くという意味です。
つまり、flaskでのroute と htmlのactionと同じ変数名をつけると、動きます。
from flask import request
app = Flask(__name__)
@app.route('/hello')
def hello():
if request.method == 'GET':
hello = "Hello world"
button=request.args.get('a')
#button=request.form['a']
html = render_template('1.html')
return html
それと、同じformタグのmethod指定で(get/post)、flaskも同じmethodを指定しなければなりません。例のコードですと、if request.method == 'GET' という意味がhtmlのmethodがgetの時にこの関数が動きます。
getと連用するのがrequest.args.get('a')
postと連用するのがrequest.form['a']
ここのaがformタグ下のbuttonのnameです。
最後に
説明の仕方が下手で申し訳ございません。とりあえず初心者レベルでの知識は以上です。また次回を楽しみにしてください。