Django讲座

32

description

部门Django讲座用的讲稿

Transcript of Django讲座

Page 2: Django讲座

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

Page 3: Django讲座

Django History

2003 开始LJWorld.com Lawrence.com KUsports.comAdrian Holovaty & Simon Willison2005.7爵士乐吉他演奏家 Django Reinhardt

Page 4: Django讲座

Django

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

Page 5: Django讲座

Django

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

Page 6: Django讲座

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

Page 7: Django讲座

Quick Start

演示

Page 8: Django讲座

Django 是把瑞士军刀Filter & Tag

ORM[ 常见关系模型 and 数据库 ]

Cache

Auth

Upload file

Form

.......

Page 9: Django讲座

Filter

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

Page 10: Django讲座

[email protected] toage(birthday): ‘’’ >>> toage( datetime(1982,3,23) ) 27 ‘’’ return (datetime.now()-birthday).days()/365

Page 11: Django讲座

Simple Tag

{%if name%} {{name}} {%endif%}{% current_time "%Y-%m-%d %I:%M %p" %}

Page 12: Django讲座

[email protected]_tagdef current_time(format_string): return datetime.now().strftime(format_string)

Page 13: Django讲座

ORM文章文章

图片图片评论评论

Page 14: Django讲座

Cache

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

Page 15: Django讲座

Auth

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

Page 16: Django讲座

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

)

Page 17: Django讲座

Auth

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

Page 18: Django讲座

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 %}

Page 19: Django讲座

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.") # ...

Page 20: Django讲座

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

Page 21: Django讲座

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>

Page 22: Django讲座

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'

Page 23: Django讲座

cleaned_data>>> data = {'subject': 'hello',... 'message': 'Hi there',... 'sender': '[email protected]',... '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'[email protected]', 'subject': u'hello'}

Page 24: Django讲座

Why Django?djangotgpylonsuliwebror........

Page 25: Django讲座

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

Page 26: Django讲座

Django Admin

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

Page 27: Django讲座

admin.py

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

Page 28: Django讲座

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

Page 29: Django讲座

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

Page 30: Django讲座

django Dev

加入到 Django 的开发中来http://code.djangoproject.com/newticket

svn diff

.diff file

最好带上测试代码Code Style: http://is.gd/4DIAE

Page 31: Django讲座
Page 32: Django讲座

Thanks