Python flask Webサーバー

Python学習【365日チャレンジ!】167日目のマスターU(@Udemy11)です。

子ども用プログラミングアプリのViscuitを使ってみたら、面白くてハマってしまいました。

自分が子供の頃にこんなアプリがあれば、間違いなくプログラミングにハマってたなとおもいつつ、スマホ自体が存在してなかったので、今の子供達ってほんといいよな〜と実感しています。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、Flackを使ってテンプレートを使ったWebページの作成について学習しました。

テンプレートを使うことで、プログラミングとページデザインを分けて分業することもできました。

対話型アプリのJarvisで学習したMVCモデル的な考え方と同じでしたね。

詳しくは、昨日の記事をごらんください。

今日は、Flaskを使ってGETなどのHTTPメソッドを取り扱ってみます。

server.py

まずは昨日書いたserver.pyを少し変更します。

from flask import Flask
from flask import render_template
from flask import request


app = Flask(__name__)


@app.route('/')
@app.route('/<username>')
def hello_name(username=None):
    return render_template('hello.html', username=username)

@app.route('/post', methods=['GET', 'POST', 'PUT', 'DELETE'])
def show_post():
    return str(request.values)

def main():
    app.debug = True
    app.run()

if __name__ == '__main__':
    main()

昨日のコードから追加したのがハイライトしている3行目と14〜16行目です

requestをインポートして、14行目でアドレスに/postmethodにHTTPメソッドをすべて入れています。

例えばこのHTTPメソッドをPOSTだけにすると、他のメソッドでは要求された値を返すことはできません。

関数show post()の返り値は、requestの値を文字列にしたものになります。

test_flask.py

名前は何でもいいのですが、新しくHTTPメソッドで値を要求するPythonファイル(test_flask)を作成します。

import requests


r = requests.post(
    'http://127.0.0.1:5000/post', data={'username': 'mark'}
)
print(r.text)

インポートするのは、簡単にHTTPメソッドを扱えるrequestsです。

4・5行目でPOSTリクエストをusernamemarkという値をサーバーに送信して、返ってきた値rをテキストで出力しています。

次に、server.pyを実行してサーバーを立ち上げた状態で、ターミナルからtest_flaskを実行します。

ターミナルで実行するのは、Pycharmで指定しているインタプリタがserver.pyを指定してるので、同じPycharm上でtest_flask.pyを実行することができないからです。

実行結果は次のようになります。

CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('username', 'mark')])])

FlaskでPOSTリクエストされたデータはImmutableMultiDictというオブジェクトに入るので、その中にusernamemarkが入ったデータが出力されています。

usernameを抽出

server.pyのコードを少し変更して、markだけが返されるようにするには、最初のコードを一部分だけ変更します。

    return str(request.values[username])

16行目に[username]を付け加えるだけです。

これでtest_flask.pyをターミナルから実行すると、markだけが返ってきます。

server.pyでは、4つのHTTPメソッドが指定されているので、test_flask.pyの4行目をrequests.postではなく、.get.put.deleteに変えても同じ結果が返されます。

じっくり理解

酒井さんの講座を受講してPythonを学習していますが、必ずわからないことが出てくるので、ネットで調べる癖がついてきました。

Udemy講師 酒井さん プログラミング Python

基本的に学習は人から与えられるものではなく、自分で手に入れるものなので、自分で調べることは重要です。

なので、講座は1つのきっかけで、きっかけをもとに理解を深めるのは、自分自身です。

しっかりと理解を深めるためにじっくりと学習しましょう

それでは明日もGood Python!