• Like
Django
Upcoming SlideShare
Loading in...5
×

Django

  • 1,024 views
Uploaded on

Django入门讲座

Django入门讲座

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,024
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
18
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Django qingfeng@douban.com 2010 8 29
  • 2. Django? 2010 8 29
  • 3. ,Web 发 动 3 2010 8 29
  • 4. 4 2010 8 29
  • 5. 过 Django web 东 5 2010 8 29
  • 6. 达 这 Django Web 发 业 6 2010 8 29
  • 7. “ ” 7 2010 8 29
  • 8. 时 Django framework 发 8 2010 8 29
  • 9. Django &历 • M-T-V • • DRY • Unix 艺术 2010 8 29
  • 10. Django • startproject [project_name] • startapp [app_name] • write urls,views 2010 8 29
  • 11. • • 统 • 发 • 跃 • .... 2010 8 29
  • 12. Django 录 2010 8 29
  • 13. M 2010 8 29
  • 14. Lyrics.objects.get_user_lyrics(uid) lyrics.get_creator() 2010 8 29
  • 15. 页 2010 8 29
  • 16. Lyrics.object.all() 发 SQL , 历 发 询 2010 8 29
  • 17. l=Lyrics.object.get(id=10) song = l.song -> [发 SQL] join SQL 2010 8 29
  • 18. 2010 8 29
  • 19. luzong/ 2010 8 29
  • 20. 单 2010 8 29
  • 21. def test_user_profile(self): people = self.client.GetPeople('/people/qingfeng') self.assertEqual(people.uid.text,'qingfeng') purl = 'http://t.douban.com/icon/u1001560-12.jpg' self.assertEqual(people.link[2].href,purl) 2010 8 29
  • 22. T+V 2010 8 29
  • 23. Generic Views 2010 8 29
  • 24. urlpatterns += patterns('django.views.generic', ('^about/$', 'simple.direct_to_template',{'template':'about.html'}), url(r'^page/(?P<object_id>d+)/$', 'list_detail.object_detail', info, name='detail_page'), url(r'^page/$', 'list_detail.object_list', {"queryset":Page.objects.all(),"paginate_by":3}, name='list_page'), url(r'^page/create/$', 'create_update.create_object', model, name='create_page'), url(r'^page/update/(?P<object_id>d+)/$', 'create_update.update_object', model, name='update_page'), url(r'^page/delete/(?P<object_id>d+)/$', 'create_update.delete_object', {"model":Page,"post_delete_redirect":"/page/"}, name='delete_page'), ) 2010 8 29
  • 25. views.py zero! 2010 8 29
  • 26. Demo 2010 8 29
  • 27. V def index(request): news = News.objects.order_by('-pub_date')[:3] c = TCorner.objects.order_by('-pub_date')[:3] return render_to_response("index.html",locals()) T {% for i in news %} <div class="left_box"> {% url detail_page i.id as detail_page %} <h2><a href="{{detail_page}}">{{ i.new_title }}</a></h2> <p>{{ i.new_content|linebreaks }}</p> </div><hr color="olive"> {% endfor %} 2010 8 29
  • 28. views 过 ? 2010 8 29
  • 29. inclusion_tag 2010 8 29
  • 30. @register.inclusion_tag('mods/home_user_info.html') def show_home_user_info(user_id): ......... {% show_home_user_info people.uid.text %} 2010 8 29
  • 31. Template tag 2010 8 29
  • 32. 24 2010 8 29
  • 33. for,if,ifequal.... 2010 8 29
  • 34. {% for o in some_list %} <tr class="{% cycle 'row1' 'row2' %}"> ... </tr> {% endfor %} 2010 8 29
  • 35. Template filter 2010 8 29
  • 36. 30+ 2010 8 29
  • 37. {{ value|linebreaksbr }} 2010 8 29
  • 38. {{ value|linenumbers }} 1. one 2. two 3. three 2010 8 29
  • 39. {{ value|random }} [a,b,c,d]->b 2010 8 29
  • 40. {{ value|title }} "my first post"->"My First Post" 2010 8 29
  • 41. tag &filter 2010 8 29
  • 42. @register.filter def join_list(arr): return ",".join(arr) 2010 8 29
  • 43. , 2010 8 29
  • 44. 2010 8 29
  • 45. 页 http://docs.djangoproject.com/en/1.1/topics/pagination/ 2010 8 29
  • 46. contact_list = Contacts.objects.all() paginator = Paginator(contact_list, 25) # Show 25 2010 8 29
  • 47. from django.core.paginator import Paginator, InvalidPage, EmptyPage def listing(request): contact_list = Contacts.objects.all() paginator = Paginator(contact_list, 25) # Show 25 contacts per page # Make sure page request is an int. If not, deliver first page. try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 # If page request (9999) is out of range, deliver last page of results. try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('list.html', {"contacts": contacts}) 2010 8 29
  • 48. {% for contact in contacts.object_list %} {# Each "contact" is a Contact model object. #} {{ contact.full_name|upper }}<br /> ... {% endfor %} <div class="pagination"> <span class="step-links"> {% if contacts.has_previous %} <a href="? page={{ contacts.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </span> {% if contacts.has_next %} <a href="? page={{ contacts.next_page_number }}">next</a> {% endif %} </span> </div> 2010 8 29
  • 49. Middleware 2010 8 29
  • 50. OpenID 2010 8 29
  • 51. Django Auth 2010 8 29
  • 52. AUTHENTICATION_BACKENDS= ( 'django.contrib.auth.backends.RemoteUserBackend', ) Openid? LDAP? database? 2010 8 29
  • 53. Cache 2010 8 29
  • 54. CACHE_BACKEND='redis_cache.cache://127.0.0.1:6379' CACHE_BACKEND='memcached://127.0.0.1:6379' from django.core.cache import cache ..... songs=cache.get('songs') if not songs: songs=super(SongManager, self).all(*args, **kwargs) cache.set('songs', songs, 3600*24*365) ...... 2010 8 29
  • 55. 统 2010 8 29
  • 56. ./manage.py [xxx] 2010 8 29
  • 57. 统 2010 8 29
  • 58. settings.py 2010 8 29
  • 59. i18n 2010 8 29
  • 60. ETag,Last-Modified 2010 8 29
  • 61. 2010 8 29
  • 62. django debug toolbar 2010 8 29
  • 63. 2010 8 29
  • 64. 2010 8 29
  • 65. django extensions http://github.com/django-extensions/django-extensions 2010 8 29
  • 66. Django Admin 2010 8 29
  • 67. 2010 8 29
  • 68. 2010 8 29
  • 69. 2010 8 29
  • 70. 2010 8 29
  • 71. Django • ..... • • Django 发 业 统 2010 8 29
  • 72. Django • http://bitbucket.org/qingfeng/django_genericview_wiki/ • 4 • http://www.djangobook.com/ • The Definitive Guide to Django [1798896] • Pro Django [3086812] 2010 8 29
  • 73. ---- 风 2010 8 29