基本Django は MVC フレームワークのようですが、 コントローラ (Controller) を「ビュー (view)」と呼び、ビュー (View) を「テンプレート (template)」と呼んでいます。
djangoappengine特有Also, never run manage.py runserver together with other management commands at the same time. The changes won't take effect.
manage.py deploy uploads your project to App Engine (use this instead of appcfg.py update)
Many advanced Django features are not supported at the moment. A few of them are: transactions (but you can use run_in_transaction() from App Engine's SDK)
トランザクション内でのクエリーできない。行うとこういう例外になる。BadRequestError: Only ancestor queries are allowed inside transactions.
主キーでの検索は可能。
そのため、トランザクションでget_or_createをしたい場合は、 def generate_primary_key(str): return hashlib.sha1(str.encode('utf-8')).hexdigest() Person.objects.get_or_create( pk = generate_primary_key(name), ...みたいな感じ。
自動付番だと主キーを知るにはクエリーしないといけない。
リレーションでの、暗黙のgetに注意こういうことをすると、リレーション先のpersonを1個ずつgetするのでとても遅いpictures = Picture.objects.filter(...) [ e for e in pictures if e.person == None ]
nullチェックしたいだけなら、こうするとずっと速い [ e for e in pictures if e.person_id == None ]
内部動作は、appengine-profilerのDatastoreProfilerで確認できる。
select_related() も試したけど効かなかった。 管理サイト管理者アカウント作成$ ./manage.py createsuperuser
リモートでも同様に $ ./manage.py remote createsuperuser
コードの変更は下記に従う。
日本語版ドキュメント(1.0)の手順は古いので注意。 admin.site.register(Person)の記述をmodels.pyで行うと、なぜかリモートのみ管理画面が動かなくなる。 admin.pyで行うこと。 (admin.pyで行うと、Authモジュールのレコードが表示されなくなる。謎)
GAEのランチャーから起動したサーバだと、なぜかログインできないので
こっちのサーバを使う $ ./manage.py runserver
ユーザ管理 $ ./manage.py shell >>> from django.contrib.auth.models import User >>> User.objects.all() [<User: nickle>] >>> User.objects.all()[0] <User: nickle> >>> User.objects.all()[0].password (snip) >>> User.objects.all()[0].is_active True >>> User.objects.all()[0].is_staff True >>>
デバッグどんなSQLに落ちてるか確認するサーバを -d で立ち上げ、クエリー後にどっかでこれを実行import logging from django.db import connection logger = logging.getLogger() logger.debug(connection.queries)
Tips
|