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

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

Pythonあれこれ 2021-02-14 - 既存関数の機能をWebに公開する

概要

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

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

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

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

この記事では、「Pythonで書いた既存関数の機能を、Flaskを用いてWebに公開する」という内容について解説しています。

既存関数の内容

def search4letters(phrase: str, letters: str = 'aeiou') -> set:
    """phrase内のlettersの集合を返す。"""
    return set(letters).intersection(set(phrase))

上記内容のモジュールが、vsearchとしてsite-packages1にインストールされていることを前提とします。

FlaskによるWebアプリケーションの内容

from flask import Flask
from vsearch import search4letters

app = Flask(__name__)

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

@app.route('/search4')
def do_search() -> str:
  return str(search4letters(
    phrase='life, the universe, and everything!',
    letters='eiru!'
  ))

app.run()

実際のWebアプリケーションのPythonコードは上記となります。動作の解説は以下です。

  • Webサーバの/search4というパスに対し、do_search()関数の結果を出力する
  • do_search()関数の中で、search4letters()関数を呼び出している
    • search4letters()関数を呼び出すために、vsearchモジュールからsearch4letters関数をインポートしている
  • search4letters()関数の結果は、str()メソッドを用いて明示的に文字列に変換している
    • search4letters()関数の結果は、そのままだとPythonの集合形式となるため

上記内容のコードを、任意の場所にhello_flask.pyとして保存します。

実行結果

前述のhello_flask.pyを実行し、Webサーバーを起動します。

Webサーバーの起動後にWebブラウザhttp://127.0.0.1:5000/search4にアクセスすると、ブラウザ画面に「{'e', 'i', '!', 'u', 'r'}」と出力されます2

f:id:rapidliner0:20210214125128p:plain
Webサーバの起動後、Webブラウザhttp://127.0.0.1:5000/search4にアクセスした結果

また、Flaskアプリケーションが実行されているコンソールに以下のメッセージが表示されます。

127.0.0.1 - - [09/Feb/2021 06:15:41] "GET / HTTP/1.1" 200 -

なお、現時点でリソース/に割り付けられているのは上述hello()関数であるため、http://127.0.0.1:5000/にアクセスすると、"Hello world from Flask!"というメッセージが表示されます。


  1. Pythonにおける、サードパーティ製のパッケージが格納される場所です。既存モジュールをsite-packagesに追加するにはpipコマンドを用います。

  2. {‘e’, ‘i’, ‘!’, ‘u’, ‘r’}という順序ではないかもしれません。Pythonの集合は順序を持たないコレクションであるため、文字列とした場合の出力順序が異なっても、それは仕様の範囲内です。