django learning
TRANSCRIPT
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
Form
Model Form
Filter
Tag
Admin
Model Admin
?????
Controller
• URL ディスパッチ• Rails とかと同じ
• データを表現• ドメインロジックもここ
Model
• モデルを操作• 表示向けデータ作成
View
• 表示向けデータの埋め込み• だいたいの場合 HTML
Template
MTV?
Template
Model
View
Controller
• フォームを出力• 入力値の検査
MTV?
Template
Model
View
Form
Model Form
MTV?
Template
Model
View
Controller
Form
Model Form
Template
Filter
Tag
• 表示用データの調整
MTV?
MTV?
Template
Model
View
Controller
Form
Model Form
Filter
Tag
ModelAdmin
Model Admin
• モデルの管理用アプリケーション• キラーアプリ
MTV?
MTV?
Template
Model
View
Controller
Form
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-thonLet’s hack!