BPStudy#37 に参加してきました。 いつも通り走り書きメモです。
今回のネタは"夜のDjango"と"LT"。LTは初の試み?前回の beproud-bot君 の紹介もLTっぽかったよね。そこからの発展かな?
開発サーバーが入ってるのでApache無くても起動出来る
モデルは継承できる. personモデルがbuchoモデルを継承とか
ViewはPythonの関数だったりClassだったりするのが問題かも
汎用Viewがある
設定次第でURLの逆引きが出来る(名前からURL生成)
Templateの継承もあるよ, 普通のincludeには戻れん
Admin: モデルに2,3行定義を書くときれいな管理画面が自動生成される
Admin の存在が大きい
充実したライブラリ群
バグがあんまり無い(full-stackの利点)
後方互換がしっかりしてる
Python製
コミュニティーの愛を感じる
DB設定の複数定義、切り替え
Routerを定義すると読み書きするDBを適切に切り替え出来る、らしい
ifnotequals -> if xx != yy
Object-level Permission
manage.py でアプリロード中にraiseするとアプリロードが自動キャンセルされる
握りつぶされると何が起きてるか分からない!
やっと直ります
django.core.cache.cache にget or set
Don't Repeat Yourself です
資料: http://tokibito.orz.hm/presentation/9/ (上下左右キーで操作)
tokibito でぐぐれ
(実際のform自動生成のためのコードを紹介)
selectプルダウンとか入力ボックスとか
バリデーションの指定と自動チェックとか
gettextで自動的に日本語表示, カスタマイズも可能
Widgetの例。チェックボックスとか,デフォルト表示とか
Templateでフォームを使う例
検証の最後に呼ばれる
Form全体のクリーニング
複数の入力項目からしか検証できないコードを書く
Django1.2から関数で値をチェックできるようになった
ModelからFormを生成する
細かいカスタマイズはDjangoのコード読んで、やる
Django内部で使われてるモジュール
2.6ならOrderedDictを使うのが良いんじゃない
force_unicode
format
timesince
wraps, lazy, memoize, ...
親より上のパスへのアクセスはエラーにするとか
ほかにもいっぱいあります
models.pyのあるPythonモジュール。
子供が「子馬が欲しい!」と言うけどなかなか子馬はあげられない
欲しいもの、プレゼントの理想の形
MLで、こんな機能が欲しい!ということが実現される
(色々アプリの構成の説明)
会員と会員登録と会員プロフィールと...を別アプリで実装
今は標準アプリが20個以上に分割されている
どうでもいい!
まじで James Bennettさんの発表をみてください!
モデルのクエリを直接使わない。チームにAPIを提供する(api.pyを作る)
クラス、関数、モデルメソッド、デコレータ、ミドルウェア、シグナル
資料: http://www.slideshare.net/torufurukawa/django-5323190
なんらかの理由でテストコードが必要。
from django.test import TestCase
(テストの実装についてコード紹介)
database作成とか自動でやってくれる
testdata.json
DBからjsonにdumpできる python manage.py dumpdata
Viewレベルのテストを支援するClient
できます by bucho
使えるはずですが...
DjangoのFixturesも使える? -> どうだろう
Django的にはフレームワーク内に収まるように使うのが基本
資料: http://www.slideshare.net/bpstudy/bpstudy-37-djagno-tips
日実用的な再利用性
再利用できるか
機能ごと
settings.py
settings_dev.py
settings_production.py
settings_bucho.py
表示用と管理用のモデル定義を分ける(論理削除データの扱いのため)
(聞き逃した)
便利
メールでのエラー通知が飛ばない
参照先DB切り替え
海外の人が作ったヤツをforkして改造してます
django_extensions
django-bpmobile
monjudoh.com, monjudoh.jp という2サイトある場合
settings.py を分けてそれぞれ定義する,Viewも分ける
ちょっとカスタマイズして使ってます
非常に便利。これだけでもDjangoの意味がある
newforms, oldforms っていう名前は微妙じゃないか?
疑問, Django template のifnotequalsの変更はJinja2から取り込んだ?
@tokibito のプレゼンがs6だ!
Djangoフォームのコード例はschemaベースの自動フォーム生成を知らないとピンと来ないかも
Djangoはいつかzope3に到達する気がする。語弊あるけど。
Railsはyaml、Djangoはjson。趣味嗜好としては逆だよなぁ
manage.py test <-> rake test
Fixtures <-> Fixtures
Client <-> integration test