AppEngine/PythonでDjangaeを試した
TokyoDjangoMeetup #6でAppEngineでDjango Adminを動かしたくて調査した記録です。
結論
- Django non-relよりDjangaeのほうがよさそう
- 制限付きではあるがDjango 1.8が、モデルAPIがそのまま動作する
- Django Adminが動く!!!
- Django REST Frameworkも動く!!!
- settings.DJANGAE_ADDITIONAL_MODULES経由で他のランタイムで開発してるモジュールも一緒に動かせる、たとえば一部だけAppEngine/Goで開発とか
検証コード
ここにあります。
https://github.com/jbking/djangae-with-drf-demo
経緯
- AppEngine/Pythonには前からDjangoサポートはあるのだがバージョンが1.5
- しかもモデルAPIがAppEngineのDatastore APIやNDB Datastore APIを強いられる
- いちおうCloud SQLでMySQLという選択肢はある
- Django Adminが動かない
- ModelFormとかももちろん動かない
作業履歴
- Django non-relでDjango AdminをAppEngine/Pythonでとりあえず動かしたことがあるので詳しく調べ始めた
- Django non-relはDjangoをforkしており1.7までしかサポートしていないことが判明
- 世間ではLTSなDjango 1.8がメジャー、暗雲がたちこめはじめる
- イベント主催者の一人にDjangaeを紹介される
- ドキュメントを読んでみたら気になる一文が
https://djangae.readthedocs.org/en/latest/db_backend/
Previously, in order to use Django's ORM with the App Engine Datastore, django-nonrel was required, along with djangoappengine. That's now changed. With Djangae you can use vanilla Django with the Datastore.
- やる気湧いてきた
- 一部制限はあるようだけどなんかいけそうな雰囲気
- とりあえずscaffoldがあるようなのでチュートリアルを流してDjango Adminを動かしてみた
ローカルで動かす $ git clone git@github.com:potatolondon/djangae-scaffold.git ${somewhere} $ cd ${somewhere} $ ./install_deps $ ./rename_scaffold_app ${somewhere} $ python manage.py checksecure --settings=${somewhere}.settings_live $ python manage.py runserver デプロイ $ vim app.yaml $ appcfg.py update ./
- 動いた
- 調子にのってDjango REST Frameworkを動かしてみた
- 動いた
質問された未検証項目
- テストって動くのか?
AppEngine/Goをモジュールとして扱う
sitepackages/google_appengine/google/appengine/tools/devappserver2/go_application.pyのGOROOTをAppEngine Go SDKのに変えたりごにょごにょしたら、そのままモジュールと認識されてマルチランタイムでの開発(Datastore共有とか)できてるので最強っぽい
# GOROOT = os.path.join(_SDKROOT, 'goroot') GOROOT = '/usr/local/go_appengine/goroot'