today::エンジニアに憧れる非エンジニア

今のところは、エンジニアとは言えないところの職種です。しかしエンジニア的なものの考え方に興味津津。

Pythonあれこれ 2021-02-12 - Webアプリケーションで起こること

概要

「Head First Python 第2版」を進めていった中で考えたことの記録です。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

  • 作者:Paul Barry
  • 発売日: 2018/03/24
  • メディア: 単行本(ソフトカバー)

今回は、「最も基本的なWebアプリケーション」の各行の動作についての解説です。

Webアプリケーションで起こること概説

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello() -> str:
  return 'Hello world from Flask!'

app.run()

上記は、「Flaskを用いてWebアプリケーションを定義し、実際にWebサーバーを起動する」という動作をする最も基本的なコードです。具体的には以下の動作をします。

  1. flaskモジュールからFlaskクラスをインポートする
  2. Flaskクラスのインスタンスappを生成する
  3. 関数をURLでデコレートする
  4. 3.でデコレートされる関数を定義する
  5. Webサーバを起動する

Flaskクラスのインポート

from flask import Flask

flaskモジュールからFlaskクラスをインポートします。

  • モジュール名とクラス名の大文字・小文字について
    • Pythonは大文字小文字を区別する
    • モジュール名は小文字の'f'から始まる
    • クラス名は大文字の'F'から始まる
  • 「クラス」は、「一群のデータと、関係する関数をひとかたまりとした設計図」といえる
    • フィールド…一群のデータ
    • メソッド…関係する関数
  • 今回用いるFlaskクラスは、「Webサーバーを稼働させるために必要なデータと関数をひとかたまりとした設計図」といえる

Flaskクラスのインスタンスの生成

app = Flask(__name__)

Flaskクラスのインスタンスを生成し、新たな変数appに代入します。

  • クラスは、その実体たるインスタンスを生成しなければ、実際に使用することはできない
  • Pythonにおけるインスタンスの生成は、クラス名と同名のメソッドを呼び出すことにより行われる
  • 引数の__name__は、「アクティブなモジュールの名前」を意味するPythonの特殊キーワードである
    • 「dunder name(ダンダー・ネーム)」と読まれる場合が多い
    • 「アクティブなモジュールの名前」を管理するのは、Pythonインタプリタの役割である

関数をURLでデコレート

@app.route('/')

Pythonのデコレータ機能を用いて、関数をURLに割り付けます。ここでは@app.route('/')というデコレータを定義しています。

  • Pythonにおける「デコレータ」は、「既存の関数の振る舞いを、当該関数のコードを書き換えることなく変更する」という操作を実現するための機能・構文である
    • @で始まる文がデコレータ構文
  • @app.route('/')というデコレータ構文の意味
    • 次の行に書かれる関数が、Webサーバのロケーション「/」に割り付けられることを意味する
    • routeデコレータがいかなる意味を持つか」については、Flaskクラスにて定義されている

デコレート対象の関数の定義

def hello() -> str:
  return 'Hello world from Flask!'

@app.route('/')というデコレータが適用される関数は、hello()関数です。hello()関数そのものは、一般的なPythonの関数です。

Webサーバの起動

app.run()

Flaskクラスのインスタンスrun()メソッドを実行すると、Webサーバが起動されます。

  • WebサーバのデフォルトのURLは127.0.0.1である
  • Webサーバのデフォルトのポート番号はTCP5000番である