Django基礎
IT寺子屋 紗音寺 ハンズオン
#django_learning
おまえだれよ
@jbking
django-ja, pylons-ja
Djangoは0.96の頃くらいから
アンケート
• WEB系の人
• PHPでコードを書いたことのある人
• Railsでコードを書いたことのある人
• Pythonでコードを書いたことのある人
• Pythonを仕事で使っている人
• Djangoを知ってる人
• Djangoを使ったことのある人
• Djangoを仕事で使っている人
今回の対象
タイムスケジュール
• 13:00 〜 イントロダクション
• 13:30 〜 ハンズオン Part 1
• 14:30 〜 ハンズオン Part 2
• 15:00 〜 ハッカソン
Djangoの基礎
Welcome to the learning Django the hard way.
• WEBアプリケーションフレームワーク
• メガフレームワーク
• だいたい何でも揃ってる
• フレームワークから外れると...
• Railsのようなもの
• admin
• MTVパターン
Djangoの基礎
MTV?
Controller
Model
View Template
Model
View
!=
そうなの?
MTV?
Template
Model
View
Controller
MTV?
Template
Model
View
Controller
Model
Form
Filter
Tag
Admin
Model
Admin
?????
Controller
• URLディスパッチ
• Railsとかと同じ
• データを表現
• ドメインロジックもここ
Model
• モデルを操作
• 表示向けデータ作成
View
• 表示向けデータの埋め込み
• だいたいの場合HTML
Template
MTV?
Template
Model
View
Controller
• フォームを出力
• 入力値の検査
MTV?
Template
Model
View
Model
Form
MTV?
Template
Model
View
Controller
Model
Form
Template
Filter
Tag
• 表示用データの調整
MTV?
MTV?
Template
Model
View
Controller
Model
Form
Filter
Tag
Model
Admin
Model
Admin
• モデルの管理用アプリケーション
• キラーアプリ
MTV?
MTV?
Template
Model
View
Controller
Model
Form
Filter
Tag
Admin
Model
Admin
Question?
ハンズオン Part 1
つくってみよう
 インストールしてますか?
 Nitrous.io https://www.nitrous.io/join/hea6JcleeFc
 ドキュメントを読みましょう
 https://docs.djangoproject.com/en/1.5/
 http://docs.djangoproject.jp/ja/latest/
 コード
 https://github.com/jbking/django_learning.git
下準備
プロジェクト
django-admin.py startproject ${project_name}
cd ${project_name}
chmod +x manage.py
./manage.py help
Adminサイト
open ${project_name}/urls.py
 # from django.contrib import admin
 # admin.autodiscover()
 # url(r'^admin/', include(admin.site.urls)),
open ${project_name}/settings.py
 'ENGINE': 'django.db.backends.sqlite3’
 'NAME': 'my.db',
 # 'django.contrib.admin’,
Adminサイト
./manage.py syncdb
./manage.py runserver
蛇足
 IPython or bpython
 django_extensions
 django-debug-toolbar
アプリ
 ./manage.py startapp ${app_name}
 open ${project_name}/settings.py
 INSTALLED_APPS
モデル
 open ${app_name}/models.py
 Postモデルの作成
 ./manage.py syncdb
Adminサイトへ登録
 open ${app_name}/admin.py
 PostAdminの作成
 adminサイトへ登録
admin.site.register(Post, PostAdmin)
シェルで操作
 ./manage.py shell
 課題1 Postオブジェクトを取り出す
 課題2 題名(subject)を変えて保存(save)する
表示する
 ルーティング作成
 open ${app_name}/urls.py
 list_posts
 url(正規表現パターン, ビュー, *args, **kwargs)
 ルーティングの登録
 open ${project_name}/urls.py
 from ${app_name} import urls.py
 url(r’’, include(urls)),
表示する
 ビューの作成
 open ${app_name}/views.py
 list_posts
 {'posts': Post.objects.order_by('updated_at').reverse().all()}
 テンプレートの作成
 open ${app_name}/templates/${app_name}/list_posts.html
 {% for post in posts %}
 {{ post.subject }}
モデルを作成する
 発展1 Postを登録できるようにする
 request.method == ‘POST’
 csrf
 発展2 Formを使って入力値をチェックする
 発展3 ModelFormを使ってみる
 発展4 CreateViewを使ってビューを書き換える
ハンズオン Part 2
リレーション
リレーション
 Commentモデルの作成
 open ${app_name}/models.py
 models.ForeignKey(...)
 ./manage.py syncdb
 adminサイトでオブジェクト追加
 シェルで確認
 comment1.post
 post1.comment_set.all()
 ビューとテンプレートで表示
フィルタとタグ
 発展1 フィルタとタグを使ってデータの表示を調整
する
 発展2 {% url ... %}でオブジェクトを表示するビュー
へのリンクを埋め込む
 発展3 many-2-manyリレーションなモデルを作って
表示をする
まとめ
1. startproject
2. startapp
3. モデル作って確認
4. ビューとかで表示
5. 以下3と4の繰り返し
Appendix
仕事で使えるようになるには
テスト
 django.test.TestCase
 django.test.client.Client
 django.test.LiveServerTestCase
 settings.pyの継承
運用する
 WSGIランナー
 mod_wsgi
 pywsgi
 gunicorn
 tornado
 マイグレーション
 South
 非同期処理
 Celery
高機能なアプリケーション
 全文検索
 Haystack
 GEO
 GeoDjango
 Admin改造
 Grappelli
 CMS
 django-cms
 mezzanine
 APIサーバ
 request.is_ajax()
 認証/認可
 Authentication backends
 マスター/スレーブ
 DB Router
 Multi databases
コミュニティなど
 Django-ja http://djangoproject.jp/
 Python mini Hack-a-thon
http://connpass.com/series/14/
 PyCon APAC http://apac-2013.pycon.jp/ja/
できること、やりたいことが見えてきましたか?
Hack-a-thon
Let’s hack!

Django learning