SlideShare a Scribd company logo
Django Web Framework 김형용, 이정민 Framework 2.1
Django High-level Python Web Framework Develop fast Automate the repetitive stuff Follow best practices
History Lawrence Journal-World ( http://www.ljworld.com ) by World Online  Developers (A...) LJWorld.com Lawrence.com KUsports.com
“ Django”  어떻게 읽어요 ? 당고  (X) 디장고  (X) 장고  (?) 쟁고  (?) Django Reinhardt
Installation Python 2.3+ Database: PostgreSQL, MySQL,  SQLite3 Python DB Interface: psycopg, MySQLdb,  pysqlite Django
Install Python http://www.python.org/download/releases/2.4/ http://www.python.org/download/releases/2.5/ Windows.. PATH c:ython24 c:ython24cripts (django-admin.py)
Install SQLite3, pysqlite 2 SQLite3 http:// www.sqlite.org/download.html pysqlite2 http:// pysqlite.org / python setup.py install
Install Django (0.95) http://www.djangoproject.com/download/ tar xvzf Django-0.95.tar.gz cd Django-0.95 sudo python setup.py install
Tutorial
Project (site) :  framework21 Database Application : admin Application : admin Application : admin /admin/ Application :  blog /blog/ Application :  phonebook /phonebook/
startproject django-admin.py  framework21 framework21 __init__.py manage.py    scripts/* settings.py    config/* urls.py    routes.rb RoR Django
startapp cd framework21 ./manage.py startapp blog framework21/phonebook __init__.py models.py    app/models/* templates    app/views/* views.py    app/controllers/* urls.py RoR
Create Model from django.db import models class Person(models.Model): name = models.CharField(maxlength=20) phone_number = PhoneNumberField() note = TextField() def __str__(self): return self.name class Admin: pass
Activating model(Application) settings.py    INSTALLED_APPS manage.py syncdb
Play with Model API from phonebook.models import * p = Person(name=u’ 김형용’ , phone_number=‘010-123-4567’, note=u‘ 안녕하세요 .’) p.save() # insert p = Person(name=u’ 이정민’ , phone_number=‘010-123-1234’, note=u‘9000+ 일 솔로인생’ ) p.save() # insert Person.objects.all() # ‘ 김형용’ , ‘ 이정민’ p = Person.objects.get(name=‘ 김형용’ ) p.note += u’ 여자친구 구합니다 .’ p.save() # update
admin interface. settings.py    INSTALLED_APPS manage.py syncdb manage.py runserver http://localhost:8000/ http://localhost:8000/admin/
URL design urls.py project-level URL configuration application-level URL configuration URL -> view(callback)
View request, response decide  which  data is presented , delegate to template  how  the data is presented
Stub view from django.http import HttpResponse def listing(request): objects = Post.objects.all() …  template…    pass context (dict) return HttpResponse(…)
Template how  the data is presented
Template {{ variable }} {{ variable|filter }}  (O) {% tag %} {% if … %}  … {% endif %} {% for .. in .. %} … {% endfor %} {% extends “base.html %}
 
URL Resolver
URL Resolver blog/urls.py urlpatterns = patterns(‘blog.views', … (r'^blog/$',  ‘post_list'), (r'^blog/new/$',  ‘post_new'), (r'^blog/(?P<post_id>+)/$', ‘post_detail'), …
URL Resolver blog/urls.py urlpatterns = patterns(' blog.views ', … (r'^blog/$',  ‘post_list'), (r'^blog/new/$',  ‘post_new'), (r'^blog/(?P<post_id>+)/$' , ‘post_detail'), …
URL Resolver blog/urls.py urlpatterns = patterns( ' blog.views ' , … (r'^blog/$',  ‘post_list'), (r'^blog/new/$',  ‘post_new'), (r'^blog/(?P<post_id>+)/$',  ‘post_detail'), … blog.views.post_detail view
URL Resolver blog/urls.py urlpatterns = patterns( ' blog.views ', … (r'^blog/$',  ‘post_list'), (r'^blog/new/$',  ‘post_new'), (r'^blog/ (?P<post_id>+) /$',  ‘post_detail'), … blog.views.post_detail(post_id=‘2’) view
URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) … blog.views.post_detail(post_id=‘2’)
URL Resolver view blog/views.py def post_detail(request, post_id): post =  Post.objects.get(pk=post_id) … model
URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) … Django template blog/templates/blog_detail.html
URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) … Django template blog/templates/blog_detail.html
URL Resolver view blog/templates/blog_detail.html <h1> {{  post .title }} </h1> <p> {{ post.content|restructuredText }} </p> Comments: <ul> {% for comment in post.comments %} <li> {{ comment.who }}: {{ comment.content }} </li> {% endfor %} </ul> Django template Context({‘post’: post})
URL Resolver view blog/templates/blog_detail.html <h1> {{ post.title }} </h1> <p> {{ post.content|restructuredText }} </p> Comments: <ul> {% for comment in post.comments %} <li> {{ comment.who }}: {{ comment.content }} </li> {% endfor %} </ul> Django template <h1>  여자친구 구함  </h1> <p> 20 세 이상 신체건강한 대한민국… </p> Comments: <ul> <li>  이정민 :  좋은 결과 있길바랍니다 . </li> </ul>
URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) return HttpResponse(html)
URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) return HttpResponse(html) OR
URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) return HttpResponse(html) def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) return render_to_response(‘blog_detail.html’, {‘post’: post}) OR
 
URL Resolver view Django template model
Where is MIDDLEWARE? URL Resolver view Django template model mid.process_request(request) mid.process_view(request, view_func, view_args, view_kwargs) mid.process_response(request, response)
Server arrangement Standalone mod_python FastCGI SCGI Twisted
Conclusion Written in python Easy admin page Elegant URL design Template Fast, easy, powerful web development with  Django
이런저런 이야기 Guido’s preference Korean Django Community GAVI : Genome Ajax Viewer GMP study http://code.djangoproject.com/ticket/2613
Getting Involved http:// djangoproject.com /documentation/ http://code.djangoproject.com/ http:// groups.google.com /group/django-user http:// groups.google.com/group/django -developers

More Related Content

Django

  • 1. Django Web Framework 김형용, 이정민 Framework 2.1
  • 2. Django High-level Python Web Framework Develop fast Automate the repetitive stuff Follow best practices
  • 3. History Lawrence Journal-World ( http://www.ljworld.com ) by World Online Developers (A...) LJWorld.com Lawrence.com KUsports.com
  • 4. “ Django” 어떻게 읽어요 ? 당고 (X) 디장고 (X) 장고 (?) 쟁고 (?) Django Reinhardt
  • 5. Installation Python 2.3+ Database: PostgreSQL, MySQL, SQLite3 Python DB Interface: psycopg, MySQLdb, pysqlite Django
  • 6. Install Python http://www.python.org/download/releases/2.4/ http://www.python.org/download/releases/2.5/ Windows.. PATH c:ython24 c:ython24cripts (django-admin.py)
  • 7. Install SQLite3, pysqlite 2 SQLite3 http:// www.sqlite.org/download.html pysqlite2 http:// pysqlite.org / python setup.py install
  • 8. Install Django (0.95) http://www.djangoproject.com/download/ tar xvzf Django-0.95.tar.gz cd Django-0.95 sudo python setup.py install
  • 10. Project (site) : framework21 Database Application : admin Application : admin Application : admin /admin/ Application : blog /blog/ Application : phonebook /phonebook/
  • 11. startproject django-admin.py framework21 framework21 __init__.py manage.py  scripts/* settings.py  config/* urls.py  routes.rb RoR Django
  • 12. startapp cd framework21 ./manage.py startapp blog framework21/phonebook __init__.py models.py  app/models/* templates  app/views/* views.py  app/controllers/* urls.py RoR
  • 13. Create Model from django.db import models class Person(models.Model): name = models.CharField(maxlength=20) phone_number = PhoneNumberField() note = TextField() def __str__(self): return self.name class Admin: pass
  • 14. Activating model(Application) settings.py  INSTALLED_APPS manage.py syncdb
  • 15. Play with Model API from phonebook.models import * p = Person(name=u’ 김형용’ , phone_number=‘010-123-4567’, note=u‘ 안녕하세요 .’) p.save() # insert p = Person(name=u’ 이정민’ , phone_number=‘010-123-1234’, note=u‘9000+ 일 솔로인생’ ) p.save() # insert Person.objects.all() # ‘ 김형용’ , ‘ 이정민’ p = Person.objects.get(name=‘ 김형용’ ) p.note += u’ 여자친구 구합니다 .’ p.save() # update
  • 16. admin interface. settings.py  INSTALLED_APPS manage.py syncdb manage.py runserver http://localhost:8000/ http://localhost:8000/admin/
  • 17. URL design urls.py project-level URL configuration application-level URL configuration URL -> view(callback)
  • 18. View request, response decide which data is presented , delegate to template how the data is presented
  • 19. Stub view from django.http import HttpResponse def listing(request): objects = Post.objects.all() … template…  pass context (dict) return HttpResponse(…)
  • 20. Template how the data is presented
  • 21. Template {{ variable }} {{ variable|filter }} (O) {% tag %} {% if … %} … {% endif %} {% for .. in .. %} … {% endfor %} {% extends “base.html %}
  • 22.  
  • 24. URL Resolver blog/urls.py urlpatterns = patterns(‘blog.views', … (r'^blog/$', ‘post_list'), (r'^blog/new/$', ‘post_new'), (r'^blog/(?P<post_id>+)/$', ‘post_detail'), …
  • 25. URL Resolver blog/urls.py urlpatterns = patterns(' blog.views ', … (r'^blog/$', ‘post_list'), (r'^blog/new/$', ‘post_new'), (r'^blog/(?P<post_id>+)/$' , ‘post_detail'), …
  • 26. URL Resolver blog/urls.py urlpatterns = patterns( ' blog.views ' , … (r'^blog/$', ‘post_list'), (r'^blog/new/$', ‘post_new'), (r'^blog/(?P<post_id>+)/$', ‘post_detail'), … blog.views.post_detail view
  • 27. URL Resolver blog/urls.py urlpatterns = patterns( ' blog.views ', … (r'^blog/$', ‘post_list'), (r'^blog/new/$', ‘post_new'), (r'^blog/ (?P<post_id>+) /$', ‘post_detail'), … blog.views.post_detail(post_id=‘2’) view
  • 28. URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) … blog.views.post_detail(post_id=‘2’)
  • 29. URL Resolver view blog/views.py def post_detail(request, post_id): post = Post.objects.get(pk=post_id) … model
  • 30. URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) … Django template blog/templates/blog_detail.html
  • 31. URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) … Django template blog/templates/blog_detail.html
  • 32. URL Resolver view blog/templates/blog_detail.html <h1> {{ post .title }} </h1> <p> {{ post.content|restructuredText }} </p> Comments: <ul> {% for comment in post.comments %} <li> {{ comment.who }}: {{ comment.content }} </li> {% endfor %} </ul> Django template Context({‘post’: post})
  • 33. URL Resolver view blog/templates/blog_detail.html <h1> {{ post.title }} </h1> <p> {{ post.content|restructuredText }} </p> Comments: <ul> {% for comment in post.comments %} <li> {{ comment.who }}: {{ comment.content }} </li> {% endfor %} </ul> Django template <h1> 여자친구 구함 </h1> <p> 20 세 이상 신체건강한 대한민국… </p> Comments: <ul> <li> 이정민 : 좋은 결과 있길바랍니다 . </li> </ul>
  • 34. URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) return HttpResponse(html)
  • 35. URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) return HttpResponse(html) OR
  • 36. URL Resolver view blog/views.py def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) t = loader.get_template(‘blog_detail.html’) c = Context({‘post’: post}) html = t.render(c) return HttpResponse(html) def post_detail(request, post_id): post = Blog.objects.get(pk=post_id) return render_to_response(‘blog_detail.html’, {‘post’: post}) OR
  • 37.  
  • 38. URL Resolver view Django template model
  • 39. Where is MIDDLEWARE? URL Resolver view Django template model mid.process_request(request) mid.process_view(request, view_func, view_args, view_kwargs) mid.process_response(request, response)
  • 40. Server arrangement Standalone mod_python FastCGI SCGI Twisted
  • 41. Conclusion Written in python Easy admin page Elegant URL design Template Fast, easy, powerful web development with Django
  • 42. 이런저런 이야기 Guido’s preference Korean Django Community GAVI : Genome Ajax Viewer GMP study http://code.djangoproject.com/ticket/2613
  • 43. Getting Involved http:// djangoproject.com /documentation/ http://code.djangoproject.com/ http:// groups.google.com /group/django-user http:// groups.google.com/group/django -developers