PythonでWEBアプリを作成する 〜 WEBアプリフレームワーク「Bottle」を使用してみる

最近やたらと忙しい上に、Excelでの手作業が増えてきたので、手作業している部分をWEBアプリにしておこうかなと思った。
WEBアプリはしっかり作るには考慮しなければならないことが多くて大変だが、今回は自分用アプリなので非常にシンプルなもので良い。
見栄えもセキュリティも気にする必要なし。

折角だからpython使ってみようということで、pythonの中でも一番簡単そうなフレームワーク「Bottle」を試してみた。
環境構築をして、下記1と2を実施した。Bottleは1つのファイルだけから構成されているし、簡単な実装だが、非常に簡単だった。
本家の「Tutorial」を参考にしながら進めた。

0.環境構築
1.Hello Worldサンプルを試す
2.DBにアクセスして結果を一覧表示する

0.環境構築
まず、PyCharmを使っているので、PyCharmをダウンロードする。

次に、適当にプロジェクトやパッケージを作成する。次のようにした。

そして、virtualenvを作成する。
PyCharmで作成したプロジェクトを選択して「File→Settings→Project→Project Interpreter」と進み、virtualenvを作成する。こうすることで、プロジェクト毎にそれぞれ異なるライブラリ・異なるバージョンのPythonを使用することができる。

作成したvirtualenvへ、bottleやmysql-connectorをインストールする。

1.Hello Worldサンプルを試す
myapp直下にindex.pyを作成。

そこに次のように記述。これだけ。

# coding: utf-8
from bottle import route, run

# Hello World Sample
@route('/hello')
def hello():
    return "Hello World!"

run(host='localhost', port=8080, debug=True)

そして、「http://localhost:8080/hello」にアクセスすると、「Hello World!」と表示される。


2.DBにアクセスして結果を一覧表示する
Bottleに標準で用意されているtemplateエンジンを使用。
次のようにviewsフォルダを作成して、「orderList.tpl」を用意。

また、コントローラ部分は「orderView.py」に記載。
DBアクセスはDAOフォルダを用意して「daoTest.py」に記載。
コントローラ部分「orderView.py」は次のようなコード。

# coding: utf-8
from bottle import route, run, view,template
from myapp.DAO import daoTest

@route('/orderListTable')
def templateTest(name='OrderListTable'):
    orderList = daoTest.getOrderList()
    return template('orderList', orderList=orderList)

run(host='localhost', port=8080, debug=True)

「orderList.tpl」は次のようなコード。

<p>OrderList:</p>
<table border="1">
<tr>
<td>Code</td><td>OrderDate</td><td>Lot Size</td>
</tr>
%for order in orderList:
  <tr>
  %for orderItem in order:
    <td>{{orderItem}}</td>
  %end
  </tr>
%end
</table>

「daoTest.py」はこんな感じ。

# coding: utf-8
import mysql.connector
import datetime

def getConnection():
    connect = mysql.connector.connect(db="データベース名", host="ホスト名/IPアドレス", port=ポート番号, user="ユーザ名", passwd="パスワード")
    return connect

def getOrderList():
    connect = getConnection()
    todayDate = datetime.date.today()
    sqlQuery = 'SQLを記載'

    cur=connect.cursor()
    cur.execute(sqlQuery)
    rows = cur.fetchall()
    for row in rows:
        print(row)

    cur.close()
    connect.close()

    return rows

実行して「http://localhost:8080/orderListTable」にアクセスすると次のように一覧表示される。

以上。
テンプレートの拡張子が「tpl」だったりするので、(出来るのかは分からないが)テンプレート部分だけ別のHTMLテンプレートに差し替えたいかも。
Javaフレームワークと異なり、どれも楽そうなので、もしくは、他のフレームワークも触って見るかも。