1 / 32

Django

Django. yanxu@staff.sina.com.cn. 网络开发人员的开发流程. 从头开始编写网络应用程序。 从头编写另一个网络应用程序。 从第一步中总结(找出其中通用的代码),并运用在第二步中。 重构代码使得能在第 2 个程序中使用第 1 个程序中的通用代码。 重复 2-4 步骤若干次。 意识到你发明了一个框架。. Django History. 2003开始 LJWorld.com Lawrence.com KUsports.com Adrian Holovaty & Simon Willison 2005.7

blue
Télécharger la présentation

Django

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Django • yanxu@staff.sina.com.cn

  2. 网络开发人员的开发流程 • 从头开始编写网络应用程序。 • 从头编写另一个网络应用程序。 • 从第一步中总结(找出其中通用的代码),并运用在第二步中。 • 重构代码使得能在第 2 个程序中使用第 1 个程序中的通用代码。 • 重复 2-4 步骤若干次。 • 意识到你发明了一个框架。

  3. Django History • 2003开始 • LJWorld.com Lawrence.com KUsports.com • Adrian Holovaty & Simon Willison • 2005.7 • 爵士乐吉他演奏家 Django Reinhardt

  4. Django • Django最可爱的地方,因为Django诞生于一个新闻环境,她提供了很多的功能,特别是她的管理接口, 特别适合提供内容的网站

  5. Django • 不要看到这就感到沮丧,尽管Django擅长于动态内容管理系统, 但并不表示Django主要的目的就是用来创建动态内容的网站。 某些方面 特别高效 与 其他方面 不高效 是有区别的

  6. Django的哲学 • 模板要保持简单 • 不能替代SQL的ORM • 鼓励测试

  7. Quick Start • 演示

  8. Django是把瑞士军刀 • Filter & Tag • ORM[常见关系模型 and 数据库] • Cache • Auth • Upload file • Form • .......

  9. Filter • <td>{{ user.birthday|toage }}</td> • <td>{{ user.username|capfirst }}</td>

  10. toage @register.filter def toage(birthday): ‘’’ >>> toage( datetime(1982,3,23) ) 27 ‘’’ return (datetime.now()-birthday).days()/365

  11. Simple Tag • {%if name%} {{name}} {%endif%} • {% current_time "%Y-%m-%d %I:%M %p" %}

  12. current_time @register.simple_tag def current_time(format_string): return datetime.now().strftime(format_string)

  13. ORM 文章 评论 图片

  14. Cache • CACHE_BACKEND = 'memcached://127.0.0.1:11211/' • >>> cache.set('my_key', 'hello, world!', 30) • >>> cache.get('my_key')

  15. Auth • 切换不同的认证系统 • 用户,组,权限的管理 • 在模板中使用认证 • 在代码中使用认证

  16. 切换认证 AUTHENTICATION_BACKENDS=( 'sinard.ldapauth.LDAPBackend', #'django.contrib.auth.backends.ModelBackend', )

  17. Auth {% if user.is_authenticated %} <p>Welcome, {{ user.username }}. Thanks for logging in.</p>{% else %} <p>Welcome, new user. Please log in.</p>{% endif %}

  18. Permissions {% if perms.foo %} <p>You have permission to do something in the foo app.</p> {% if perms.foo.can_vote %} <p>You can vote!</p> {% endif %} {% if perms.foo.can_drive %} <p>You can drive!</p> {% endif %}{% else %} <p>You don't have permission to do anything in the foo app.</p>{% endif %}

  19. in Views def my_view(request): if not (request.user.is_authenticated() and request.user.has_perm('polls.can_vote')): return HttpResponse("You can't vote in this poll.") # ...

  20. @login_required from django.contrib.auth.decorators import login_required@login_requireddef my_view(request): # ...

  21. Form >>> class CommentForm(forms.Form):... name = forms.CharField(initial='class')... url = forms.URLField()... comment = forms.CharField()>>> f = CommentForm(initial={'name': 'instance'}, auto_id=False)>>> print f<tr><th>Name:</th><td><input type="text" name="name" value="instance" /></td></tr><tr><th>Url:</th><td><input type="text" name="url" /></td></tr><tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>

  22. cleaned_data >>> data = {'subject': '',... 'message': 'Hi there',... 'sender': 'invalid e-mail address',... 'cc_myself': True}>>> f = ContactForm(data)>>> f.is_valid()False>>> f.cleaned_data...AttributeError: 'ContactForm' object has no attribute 'cleaned_data'

  23. cleaned_data >>> data = {'subject': 'hello',... 'message': 'Hi there',... 'sender': 'foo@example.com',... 'cc_myself': True,... 'extra_field_1': 'foo',... 'extra_field_2': 'bar',... 'extra_field_3': 'baz'}>>> f = ContactForm(data)>>> f.is_valid()True>>> f.cleaned_data # Doesn't contain extra_field_1, etc.{'cc_myself': True, 'message': u'Hi there', 'sender': u'foo@example.com', 'subject': u'hello'}

  24. Why Django? • django • tg • pylons • uliweb • ror • ........

  25. 我选择Django的原因 • 质朴 • 方便开发 • Web是一个由简单到复杂的过程 • 用一个框架可以减少重复建设时间

  26. Django Admin http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin

  27. admin.py from django.contrib import adminfrom myproject.myapp.models import Authoradmin.site.register(Author)

  28. 常见问题 • ORM不支持的SQL怎么办 • Django如何连接mysql • 听说django模板引擎效率很低 • 我应该基于Django Admin做开发吗

  29. 缺点 • 不够友好的URL规则 • 不支持多数据库操作 • 文档 0.96 1.0 1.1 Dev..... • 中文资料

  30. django Dev • 加入到Django的开发中来 • http://code.djangoproject.com/newticket • svn diff • .diff file • 最好带上测试代码 • Code Style: http://is.gd/4DIAE

  31. Thanks

More Related