5. WebでのリクエストURLによる処理の振り分け(PythonのFlaskを使用)
Webサーバ
Webサーバは,Webブラウザ等からの要求に対して,返答を返す.返答はHTMLであったり,他のオブジェクトであったりする.
Webサーバのポート番号
Webサーバの起動時には,通信に使うポート番号を指定できる.この演習では,ポート番号8080を指定する.
リクエストのルーティング
Webサーバに送られたURLに応じて処理を変えたいとする.例えば,Webブラウザで「http://localhost/db」としたときには「welcome」を,「http://localhost/db/hoge」としたときには「hoge」を表示したいとする.
このとき,次のようなプログラムを書く.
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/db')
def tables():
return 'welcome'
@app.route('/db/hoge')
def hoge():
return 'hoge'
app.run(host='localhost', port=8080, debug=True)
■ SQLite3でのテーブル一覧取得
SQLite3でテーブル一覧を取得したいときは,次のようなSQL文を書く.
SELECT name FROM sqlite_master WHERE type='table';
演習準備
この演習では Python を使用する。Python がインストールされていない場合は,下記の「Python 3.12 のインストール(Windows 上)」を展開し,手順に従いインストールすること。下記の「必要なライブラリのインストール」を実施すること。
Python 3.12 のインストール(Windows 上) [クリックして展開]
以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。
方法1:winget によるインストール
管理者権限のコマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。
winget install -e --id Python.Python.3.12 --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 AssociateFiles=1 InstallLauncherAllUsers=1"
--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。
方法2:インストーラーによるインストール
- Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
- ダウンロードしたインストーラーを実行する。
- 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから
pythonコマンドを実行できない。 - 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。
インストールの確認
コマンドプロンプトで以下を実行する。
python --version
バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。
演習
■ 前準備
・MySQL Employees Sampleデータベース
MySQL Employees Sampleデータベースの出典と著作権表示
出典:MySQL employees sample database https://dev.mysql.com/doc/employee/en/
=== This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Please contact http://www.mysql.com/about/contact/ for more information.
■ ステップ1
IPythonコンソールで,次のPythonプログラムを実行しなさい.
SQLite3データベースに接続する.
◆ 今日の演習ではSQLite3データベースファイル名はc:\hoge3.sqlite
■ ステップ2
エディタを使う.
- File -> New file…と操作する.
- エディタで,「print(1 + 2)」と書いてみる.
- 実行ボタンをクリックする.
結果を確認する.
■ ステップ3
- エディタで次のプログラムを記述する.
from flask import Flask
app = Flask(__name__)
@app.route('/db')
def tables():
return 'welcome'
app.run(host='localhost', port=8080, debug=True)
- ファイルを書き換えたので,File -> Saveと操作する.
- 実行ボタンをクリックする.
- コンソールにエラーメッセージが出ていないことを確認する.
- Webブラウザを開き,http://localhost:8080/db を指定するとwelcomeと表示される.
※ Windowsでうまく動かない場合
ファイアウォールが設定されている可能性がある.次の手順で,ポート番号8080に関するファイアウォールを解除してみる.
■ ステップ4
- ファイルを書き換えて,File -> Saveと操作する.
- Webブラウザで,http://localhost:8080/db を指定すると,今度は,hogeと表示される.
■ ステップ5
- エディタで次のプログラムを記述する.
from flask import Flask
import sqlite3
import pandas
app = Flask(__name__)
@app.route('/db')
def tables():
c = sqlite3.connect('c:\\hoge3.sqlite')
df = pandas.read_sql("SELECT * FROM sqlite_master WHERE type='table';", c)
c.close()
return '<pre>%s</pre>' % str(df)
app.run(host='localhost', port=8080, debug=True)
- ファイルを書き換えたので,File -> Saveと操作する.
- 先ほど起動したWebサーバがまだ動いている場合は,「Ctrl + C」で停止する.
- Webブラウザを開き,http://localhost:8080/db を指定するとテーブル一覧が表示される.
■ ステップ6
- エディタで次のプログラムを記述する.
from flask import Flask
import sqlite3
import pandas
app = Flask(__name__)
@app.route('/db')
def tables():
c = sqlite3.connect('c:\\hoge3.sqlite')
df = pandas.read_sql("SELECT * FROM sqlite_master WHERE type='table';", c)
c.close()
return '<pre>%s</pre>' % str(df)
@app.route('/db/departments')
def departments():
c = sqlite3.connect('c:\\hoge3.sqlite')
df = pandas.read_sql("SELECT * FROM departments;", c)
c.close()
return '<pre>%s</pre>' % str(df)
app.run(host='localhost', port=8080, debug=True)
- ファイルを書き換えたので,File -> Saveと操作する.
- 先ほど起動したWebサーバがまだ動いている場合は,「Ctrl + C」で停止する.
- Webブラウザを開き,http://localhost:8080/db/departments を指定するとデータが表示される.