前回の記事では、PythonAppを作成し、動作確認をするまでを紹介しました。
Python環境を整備する
Python本体は準備できましたが、パッケージソフトを整備するところから始めます。
1. Pythonがインストールされたディレクトリにアクセスする
アクセスするためのコマンドは、Python Appを作成したときの画面に表示されているので参考にしましょう。「source **** && cd ****」の部分です。(クリックすればコピーできます)
virtualenvでpythonがインストールされるためactivateをして、homeディレクトリ配下に「Application root」の名前のディレクトリが作られているので、そのディレクトリをカレントディレクトリにしましょう。
下の画像のように行の頭に(())で囲まれた場所に、環境名が表示されます。
「Python -V」コマンドで、指定したバージョンのPythonがインストールされていることも確認しましょう。
2. パッケージのインストール
今回は、Flaskを使ってMySQLにアクセスしたいので、Flaskとmysqlclientをインストールします。
pip install flask mysqlclient
pipコマンドのupgrade警告が出る場合は適宜更新しましょう。
WARNING: You are using pip version 21.3.1; however, version 22.3 is available.
You should consider upgrading via the '/home/xxx/virtualenv/api_test/3.9/bin/python3.9_bin -m pip install --upgrade pip' command.
((api/test:3.9)) [api_test]$ pip install --upgrade pip
Requirement already satisfied: pip in /home/xxx/virtualenv/api_test/3.9/lib/python3.9/site-packages (21.3.1)
Collecting pip
Using cached pip-22.3-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 21.3.1
Uninstalling pip-21.3.1:
Successfully uninstalled pip-21.3.1
Successfully installed pip-22.3
((api/test:3.9)) [api_test]$
Flaskを記述する
app.py(Application startup fileに設定したファイル)が呼ばれるので、編集していきます。
import os
import sys
from flask import Flask
sys.path.insert(0, os.path.dirname(__file__))
app = Flask(__name__)
@app.route('/')
def test():
return 'api_test'
このようにapp.pyを書き換えて、Application URLにアクセスしてみましょう。指定した内容が表示されていればFlaskが動いています。
設定がかみ合っていない場合は、下の画像のように500エラーとなる場合があります。確認しましょう。
cPanelの設定というよりも、passenger_wsgi.pyからapp.pyが呼べているかを確認しましょう。
確認する点は、
①load_sourceで指定するファイル名があっているか。(例:app.pyにFlask設定がある)
②applicationで呼び出すオブジェクトがいるか。(例:app=Flaskで定義しているから、wsgi.app)
の2点をみればよいでしょう。
stderr.logファイルにエラーメッセージが追記されているのでよく読んで対応しましょう。
SQLからデータを取得するWEB APIを作る
MYSQLにユーザを追加する(任意)
任意ですが、すべてを操作することを想定しないのであれば、API用にアクセス権を制御するべきでしょう。
- cPanel上のデータベースから「MySQLデータベース」を選択します。
2. 新しいユーザーの追加にユーザー名とパスワードを入力して作成する。
3. データベースにユーザーを追加する
4. ユーザー権限を設定する。(使用するものにチェックを入れる)
Pythonを作成する
app.pyに、DBに接続し、SELECT文を投げる処理を書いてみましょう。
import os
import sys
from datetime import datetime, date, timedelta
import json
from flask import Flask, make_response
import MySQLdb
sys.path.insert(0, os.path.dirname(__file__))
app = Flask(__name__)
def json_serial(obj):
if isinstance(obj, (datetime, date)):
return obj.isoformat()
elif isinstance(obj, timedelta):
return str(obj)
raise TypeError("Type %s not serializable" % type(obj))
@app.route('/')
def test():
try:
connection = MySQLdb.connect(
host='127.0.0.1',
user='ユーザーメイ',
passwd='パスワード',
db='DB名')
print("MySQL Database connection successful")
except Error as err:
print(f"Error: '{err}'")
with connection.cursor(MySQLdb.cursors.DictCursor) as cur:
cur.execute("select * from game where 1 limit 1")
data = cur.fetchall()
connection.close()
response = {}
response["body"] = data
response["status"] = 200
return make_response(json.dumps(response, default=json_serial))
app.pyの編集が終わったら、cPanelからAppを再起動しましょう。
アクセスして、取得できていれば成功です。
まとめ
この記事では、Flask,mysqlclientを使用して、ColorfulboxでWebAPIを作成する方法を紹介しました。
検索エンジンで調べるとCGIを使う方法が出てきますが、CGIを使わなくても作成することが可能です。
作りたいものや環境によってベストは違いますが、簡単ですのでこちらの方が管理はしやすいと思います。
コメント