Mitama Advent Calendar2日目です。
木瓜丸です。今回から何回かに分けてMitamaでゴミアプリの代名詞Todoアプリを組んでみましょう!
この記事では、アプリの動かし方や基本的なアプリの構成について書きます。
アプリディレクトリの作成
アプリを動かす時は、
- Pythonのモジュール検索パス(site-packagesとかのパス)にパッケージをインストール方法
- プロジェクトのディレクトリの直下にパッケージを設置する方法
の2つがあります。
(「プロジェクト」ってなんや?って方は、こちら→『Mitama + nginx + uWSGIで社内システムを立てる』)
今回は2のプロジェクトディレクトリの直下にアプリディレクトリを置く方法で動かしましょう。プロジェクトディレクトリで次のコマンドを叩いてください。
$ mitama mkapp todo
そうするとディレクトリができたかと思います。
ディレクトリ構成
一度ディレクトリの構成を見てみましょう。
todo
├── __init__.py
├── controller.py
├── main.py
├── model.py
├── static
│ └── vertical-logo.svg
└── templates
└── welcome.html
開発経験がある方ならおわかりかもしれませんが、Mitamaが木瓜丸なりにしっかり目にMVCアーキテクチャに従っています。
main.py
from mitama.app import App, Router
from mitama.utils.controllers import static_files
from mitama.app.method import view
from .controller import WelcomeController
class App(App):
# name = 'MyApp'
# description = 'This is my App.'
router = Router(
[
view("/", WelcomeController),
view("/static/<path:path>", static_files()),
]
)
main.pyにはアプリの設定やルーティングの設定などの処理を記述します。
controller.py
from mitama.app import Controller
from mitama.app.http import Response
class WelcomeController(Controller):
def handle(self, request):
template = self.view.get_template("welcome.html")
return Response.render(template)
controller.pyにはリクエストの情報を受けとり、モデルやビューを呼び出してレスポンスを作成して返す処理を記述します。基本的にはControllerクラスを継承したものを作成します。
model.py
from mitama.db import BaseDatabase
# from mitama.db.types import *
class Database(BaseDatabase):
pass
db = Database()
# db.create_all()
model.pyにはデータベースに関わるオブジェクトを定義します。この状態では何もおこりません。
その他
templates/にはControllerから使用するJinja2テンプレートを入れます。
static/は、デフォルトでは静的ファイルの読み込み先になっています。特に変更をしなければ、この中に入れたファイルがlocalhost/static/<static下のパス>のようなURLでアクセスできるようになります。
動かしてみる
では、プロジェクトでアプリを動かしてみましょう。
まずは、mitama.jsonを編集し、アプリを登録します。
{
"apps":{
"mitama.portal": {
"path": "/"
},
"todo": {
"path": "/todo"
}
}
}
今回はプロジェクト直下にアプリを配置しているので、そのアプリのパッケージ名(フォルダ名)をキーに、pathには好きなパスを書き込んでおきましょう。
できたら、プロジェクトディレクトリで次のコマンドを叩き、テスト用のサーバーを立ち上げましょう。
$ mitama run
叩いたら、http://localhost:8080/todo にアクセスすれば、アプリが開けます。ウェルカム画面が出れば成功です。
長くなってしまったので、今回はここまでにします。
次回はModelの作り込みをしてみましょう。