Django讲座

Post on 03-Sep-2014

3.278 views 7 download

Tags:

description

部门Django讲座用的讲稿

Transcript of Django讲座

Djangoyanxu@staff.sina.com.cn

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

Django History

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

Django

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

Django

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

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

Quick Start

演示

Django 是把瑞士军刀Filter & Tag

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

Cache

Auth

Upload file

Form

.......

Filter

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

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

Simple Tag

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

current_time@register.simple_tagdef current_time(format_string): return datetime.now().strftime(format_string)

ORM文章文章

图片图片评论评论

Cache

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

Auth

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

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

)

Auth

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

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

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

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

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>

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'

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

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

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

Django Admin

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

admin.py

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

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

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

django Dev

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

svn diff

.diff file

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

Thanks