Python

フレームワーク「Flask」を使う方法

By 2021年9月3日No Comments

この記事では、PythonのフレームワークであるFlaskについて解説していきます。

Flaskを使うことでWebアプリケーションを作ることができます。この記事を通してFlaskを使った簡単なWebサイトを作成していきます。

Pythonのフレームワーク「Flask」について

Flaskを使った有名なアプリケーションはNetflixやLinkedinやPinterestなどがあります。Flaskはマイクロウェブアプリケーションフレームワークで必要最低限の機能しか搭載されていなく他のウェブアプリケーションフレームワークに比べて動きが軽くなります。

必要最低限の機能しか搭載されていないので多くの機能を自分で実装していく必要がありますが、これは細かなカスタマイズをすることが可能というメリットでもあります。

PythonのFlaskを使い簡単なWebサイトを作る

それでは、Flaskを使って簡単なWebサイトを作っていきます。まずはターミナルかコマンドプロンプト等を起動してFlaskのインストールをします。

pip install Flask

もしくは 

pip3 install Flask

Pythonファイルから「こんにちは。こんにちは。」と表示されているWebサイトを作成していきましょう。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    hello = "こんにちは。こんにちは。"
    return hello

if __name__ == "__main__":
    app.run()

出力結果:

* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

「http://127.0.0.1:5000/」に接続すると「こんにちは。こんにちは。」と表示されているWebサイトを確認する事ができます。

コードの中身の解説をしていきます。

「app = Flask(__name__)」でFlaskを利用できるように定義しています。「app.route(‘/’)」はルートのアドレスを指定しています。そして、指定したルートにURLとFlaskの処理を対応づけてURLと「こんにちは。こんにちわ。」と表示する関数を紐づけて作成しています。

ポート番号とデバッグの設定はapp.run( )の引数で変更することができます。app.run( )の引数を下記のように指定します。

app.run(port=8000, debug=True)
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    hello = "Hello world"
    return hello

if __name__ == "__main__":
    app.run(port=8000, debug=True)

出力結果:

* Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 515-805-911

デバッグモードをTrueにしたので「off」から「active」になりました。そして、ポート番号が指定した「:8000」に変更になっているのがわかります。

PythonのFlaskでHTMLファイルを読み込んでWebサイトに表示させる方法

Flaskを使っているPythonファイルと同じ階層に置いてあるhtmlファイルを読み込んでWebサイトに表示させることもできます。

まずは、下記のような「index.html」を作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>これはWebサイトです。</title>
</head>
<body>
<h1>これはWebサイトです。</h1>
<p>みなさんこんにちは。</p>
</body>
</html>

そして、同じ階層にあるPythonファイル内のsend_static_file( )でindex.htmlファイルを読み込みます。

from flask import Flask
app = Flask(__name__, static_folder='.', static_url_path='')
@app.route('/')
def index():
    return app.send_static_file('index.html')

if __name__ == "__main__":
    app.run(port=8000, debug=True)

ターミナルやコマンドプロンプト等からサーバー起動して「http://127.0.0.1:8000/」にアクセスします。すると下記の画面が表示されます。

これはWebサイトです。

みなさんこんにちは。

このように、htmlファイルを読み込んでWebサイトに表示させることができました。

PythonのFlaskでrender_template( )関数を使う方法

Flaskでrender_template( )関数を使いhtmlファイルを読み込んでhtmlファイルに値を入れることができます。render_template( )関数を使う場合はtemplatesフォルダを新たに作成して、そこにhtmlファイルを置く必要があります。

まずは、render_templateをインポートします。

from flask import Flask, render_template

pythonファイルと同じ階層に以下のようにtemplatesフォルダを作ってください。

(flaskを扱うpythonファイル).py

templates

    └ index.html

templatesフォルダの中のindex.htmlを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>これはWebサイトです。</title>
</head>
<body>
<h1>これはWebサイトです。</h1>
<p>みなさんこんにちは。</p>
こんにちは{{ message }}
</body>
</html>

次に、Pythonファイルを下記のように記述します。render_template( )関数の引数messageで値を渡すことができます。

from flask import Flask, render_template

app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html', message="みなさん")

if __name__ == "__main__":
    app.run(port=8000, debug=True)

http://127.0.0.1:8000/にアクセスします。

出力結果:

これはWebサイトです。

みなさんこんにちは。

こんにちは。みなさん

このようにPythonファイルから値をhtmlファイルに渡して出力することができました。

PythonのFlaskでログイン機能のあるHTMLで入力されたデータを扱う

Webサイト上のログイン画面でIDとパスワードをテキストフィールド内で入力された値をpythonで扱うには入力された値をサーバーサイドにPOSTで送ります。

POSTとは、HTTP通信のデータを送る際の手段になります。データを送るには、htmlファイルのformタグの中にinputタグを入れます。

まずは、下記のようなform.htmlを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>フォーム画面</title>
</head>
<body>
<form method="POST">
    <input type="text" name="ID" placeholder="ID">
    <input type="password" name="パス" placeholder="パスワード">
    <input type="submit" value="送信">
</form>
</body>
</html>

このファイルをform.htmlなどで出力をさせると以下のような画面が表示されます。

次に、こちらに入力されて受け取ったデータをpythonで扱えるようにします。flaskで作るのでform.htmlはtemplatesフォルダに入れてください。ディレクトリの階層は下記になります。

(flaskを扱うpythonファイル).py

templates

    └ form.html

requestをインポートします。

from flask import Flask, render_template, request

@app.route( )の引数に methods=[‘GET’, ‘POST’]を指定します。

from flask import Flask, render_template, request

app = Flask(__name__)
# ログイン処理
@app.route('/', methods=['GET', 'POST'])
def form():
    if request.method == 'POST':
        print("POSTされたIDを表示します" + str(request.form['ID']))
        print("POSTされたPASSWORDを表示します。" + str(request.form['パス']))
        return render_template('form.html')

  #1回目のデータが何も送られてこなかった時のエラーを回避するための処理
    else:
        return render_template('form.html')

if __name__ == "__main__":
app.run(port=8000, debug=True)

ブラウザの画面「http://127.0.0.1:8000/」で表示されている入力画面のテキストフィールドのIDを「hello」、パスワードを「1234」を入力して送信ボタンを押すとターミナルやコマンドプロンプト等で下記のような出力結果になります。

出力結果:

POSTされたIDを表示しますhello
POSTされたPASSWORDを表示します。1234
127.0.0.1 - - [19/Aug/2021 13:05:33] "POST / HTTP/1.1" 200 -

このようにWebサイト上のテキストフィールドで入力された値もpythonで扱うことができました。

まとめ

この記事では、Flaskを使って簡単なWebサイトを作成しました。htmlファイルにPythonのデータを読み込んだりWebサイト上で入力された値を扱うことができました。以上、PythonのフレームワークであるFlaskを使って簡単なWebサイトを作る方法でした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL