はじめてのフレームワークflask

はじめに

今回は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です。

最後に

説明の仕方が下手で申し訳ございません。とりあえず初心者レベルでの知識は以上です。また次回を楽しみにしてください。