• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Django敏捷开发 刘天斯
 

Django敏捷开发 刘天斯

on

  • 7,774 views

 

Statistics

Views

Total Views
7,774
Views on SlideShare
6,155
Embed Views
1,619

Actions

Likes
6
Downloads
96
Comments
0

9 Embeds 1,619

http://blog.liuts.com 1558
http://www.slideshare.net 31
http://xianguo.com 10
http://www.liuts.com 7
http://static.slidesharecdn.com 6
http://www.zhuaxia.com 2
http://zhuaxia.com 2
http://note.wiz.cn 2
http://liuts.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Django敏捷开发 刘天斯 Django敏捷开发 刘天斯 Presentation Transcript

    • 敏捷开发 主讲:刘天斯
    • Python 简介 Python 是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构,以及类别的使用。 Python 揉合了简单的语法和强大的功能。它的语法表达优美易读。它具有很多优秀的脚本语言的特点:解释的,面向对象的,内建的高级数据结构,支持模块和包,支持多种平台,可扩展。而且它还支持交互式方式运行,图形方式运行。它拥有众多的编程界面支持各种操作系统平台以及众多的各类函数库。利用 C 和 C++ 可以对它进行扩充。个别的应用软件如果需要有一个可程序化界面也可以利用它来做为扩展语言用。最后, Python 的可移植度非常高 : 它可以在许多的 Unix 类平台上运行,在 Mac,MS-DOS, 视窗 Windows , Windows NT , OS/2 , BeOS ,至 RISCOS 上都有相关的 Python 版本。
    • Python 应用及前景 Python 的应用 Zope- 应用服务器 Plone- 内容管理系统 Django 、 TurboGears- 鼓励快速开发的 web framework Twisted - Python Network Application Framework Python 的网络应用程序框架 Bit Torrent - 著名的 BT 下载工具 2006 年的 Google 编程大赛已经将 Python 作为参赛语言之一 科学计算,图像处理,游戏, Web , GUI ,网络,教学等, python 除了对程序效率要求高的地方不能用,其它所有地方都有应用。 Python 的前景 Python 在编程领域的占有率一直处于稳步上升之中,根据最新的数据, Python 排名第七。前六名分别是 Java,C,VB,C++,PHP 和 Perl. 作为一个很年轻的语言, Python 的位置已经相当令人振奋了。随着微软将 Python 纳入 .Net 平台,相信 Python 的将来会更加强劲发展。 Python 很可能会成为 .Net 平台快速开发的主流语言。著名的搜索引擎 Google 也大量使用 Python 。更加令人吃惊的是,在 Nokia 智能手机所采用的 Symbian 操作系统上, Python 成为继 C++,Java 之后的第三个编程语言!可见 Python 的影响力之巨大。
    • Python 应用及前景
    • Python web 框架 Django 概述 Django( 发音: /dʒæŋgo/) 是用 python 语言写的开源 web 开发框架 (open source web framework) ,它鼓励快速开发 , 并遵循 MVC 设计。 Django 遵守 BSD 版权,并发布于 2005 年 7 月。 设计哲学 Django 的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用 , 多个组件可以很方便的以“插件”形式服务于整个框架, Django 有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得 Django 具有很强的可扩展性。它还强调快速开发和 DRY(Do Not Repeat Yourself) 原则。 Django 基于 MVC 的设计十分优美: 对象关系映射 (ORM,object-relational mapping)     以 Python 类形式定义你的数据模型, ORM 将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库 API ,同时你也可以在 Django 中使用原始的 SQL 语句。 URL 分派     使用 正则表达式 匹配 URL ,你可以任意设计的 URL ,没有框架的特定限定。象你喜欢的一样灵活。 模版系统     使用 Django 强大而可扩展的模板语言,可以分隔设计、内容和 Python 代码。并且具有可继承性。 表单处理     你可以方便的生成各种表单模型,实现表单的有效性检验。可以方便的从你定义的模型实例生成相应的表单。 Cache 系统     可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。 会话 (session) ,用户登录与权限检查     快速开发用户会话功能。 国际化     内置国际化系统,方便开发出多种语言的网站。 自动化的管理界面     不需要你花大量的工作来创建人员管理和更新内容。 Django 自带一个 ADMIN site, 类似于 内容管理系统 。 部署 Django 可以运行在 Apache 上,也可以运行在支持 WSGI , FastCGI 的服务器上。支持多种数据库,已经支持 Postgresql, MySql, Sqlite3 、 sqlserver 、 oracle 等等。目前, Google App Engine 也支持 Django 的某些部分。
    • Django- 安装 / 配置 >>> 配制 Django 平台 . swf
    • Django- 与普通 CGI 比较 普通 CGI 代码: #!/usr/bin/python import MySQLdb print &quot;Content-Type: text/html&quot; print &quot;<html><head><title>Books</title></head>&quot; print &quot;<body>&quot; print &quot;<h1>Books</h1>&quot; print &quot;<ul>&quot; connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')‏ cursor = connection.cursor()‏ cursor.execute(&quot;SELECT name FROM books ORDER BY pub_date DESC LIMIT 10&quot;)‏ for row in cursor.fetchall(): print &quot;<li>%s</li>&quot; % row[0] print &quot;</ul>&quot; print &quot;</body></html>&quot; connection.close()‏
    • Django- 与普通 CGI 比较 MVC 设计模式 : # models.py (the database tables)‏ from django.db import models class Book(models.Model): name = models.CharField(maxlength=50)‏ pub_date = models.DateField()‏ # views.py (the business logic)‏ from django.shortcuts import render_to_response from models import Book def latest_books(request): book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html', {'book_list': book_list})‏
    • Django- 与普通 CGI 比较 # urls.py (the URL configuration)‏ from django.conf.urls.defaults import * import views urlpatterns = patterns('', (r'latest/$', views.latest_books), )‏ # latest_books.html (the template)‏ <html><head><title>Books</title></head> <body> <h1>Books</h1> <ul> {% for book in book_list %} <li>{{ book.name }}</li> {% endfor %} </ul> </body></html>
    • Django- 与普通 CGI 比较
      • 问题分析:
      • 当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不应该同时存在于各个独立的 CGI 脚本中, 所以最踏实的做法是把这些代码重新组织到一个公共类库里面。
      • 一个开发人员 确实 需要去关注如何输出 Content-Type 以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。 那些初始化和释放相关的工作应该交给一些通用的框架来完成。
      • 如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗? 从这点看来,就需要一些环境相关的配置文件。
      • 如果一个 Web 设计师,完全没有 Python 开发经验,但是又需要重新设计页面的话,又将发生什么呢? 理想的情况是,页面显示的逻辑与从数据库中读取书本纪录分隔开,这样 Web 设计师的重新设计不会影响到之前的业务逻辑。
    • Django- 处理请求过程
    • Django-”hello world” 一、 django-admin.py startproject test 二、新建一个 helloworld.py 文件: from django.http import HttpResponse def index(request): return HttpResponse(&quot;Hello, Django.&quot;) 三、 修改 urls.py from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', ' test.helloworld.index'), )‏ 四、运行: manage.py runserver 后用浏览器访问: http://localhost/
    • Django- 模板系统 django 模板 是一个用来分离文档的表示和数据的文本文件。一个模板定义了占位符和各式基本逻辑(即模板标签 (template tag) )来定义文档应该如何显示。通常,模板用来生成 HTML ,但是 django 模板 同样能够生成各种基于文本 (text-based) 的各式。 包括元素 : 变量、 过滤器、标签、模板继承、内建标签、自定义标签及过滤器库。 详细进入》》 Django - 模板系统介绍 . swf
    • Django- 操作数据库 普通的 DB 操作 : from django.shortcuts import render_to_response import MySQLdb def book_list(request): db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost') cursor = db.cursor() cursor.execute('SELECT name FROM books ORDER BY name') names = [row[0] for row in cursor.fetchall()] db.close() return render_to_response('book_list.html', {'names': names}) 引出的问题 : 1 ,我们把数据库连接的参数硬编码到代码里面了,理想状况下它们应该存储在 Django 配置里面。 2 ,我们必须得写一些样板文件代码,如建立连接,创建 cursor ,执行语句和关闭连接等 细想状况下,我们应该只需指出我们需要什么结果。 3 ,它把我们和 MySQL 绑在一起,如果我们想切换到 PostgreSQL 或者 SQLserver 我们必须使用不同的数据库适配器 psycopg ,改变数据库连接参数以及考虑重写 SQL 语句 理想状况下数据库服务器应该是抽象的,替换数据库应该只在一个地方设置。
    • Django- 操作数据库 理想的解决方法 : 一、在 settings.py 配制数据库连接参数。 DATABASE_ENGINE = ''   DATABASE_NAME = ''   DATABASE_USER = ''   DATABASE_PASSWORD = ''   DATABASE_HOST = ''   DATABASE_PORT = '' 二、数据库建模 : class Book(models.Model):         title = models.CharField(maxlength=100)         authors = models.ManyToManyField(Author)         publisher = models.ForeignKey(Publisher)         publication_date = models.DateField() 三、代码: from django.shortcuts import render_to_response    from mysite.books.models import Book    def book_list(request):         books = Book.objects.order_by('title')         return render_to_response('book_list.html', {'books': books})  
    • Django- 操作数据库 Python 定义模型 : 一个 Django 模型用 Python 代码描述了你的数据库中的数据,它是你的数据结构,相当于 SQL 的 CREATE TABLE 语句,除了在 Python 中它比数据库定义包含的内容更多 Django 在后台使用模型来执行 SQL 代码并返回方便的 Python 数据结构来表示你的数据库表的行, Django 也使用模型来描述一些高级概念,这些 SQL 是做不到的。 Django 采用这种工作方式有几个原因: 1 、 自省(运行时自动识别数据库)会导致过载和有数据完整性问题。为了提供方便的数据访问 API , Django 需要以 某种方式 知道数据库层内部信息,有两种实现方式。第一种方式是用 Python 明确的定义数据模型,第二种方式是通过运行时扫描数据库来自动侦测识别数据模型。第二种方式看起来更清晰,因为数据表信息只存放在一个地方 - 数据库里,但是会带来一些问题。首先,运行时扫描数据库会带来严重的系统过载。如果每个请求都要扫描数据库的表结构,或者即便是服务启动时做一次都是会带来不能接受的系统过载。 2 、 编写 Python 代码是非常有趣的,保持用 Python 的方式思考会避免你的大脑在不同领域来回切换。 这可以帮助你提高生产率。不得不去重复写 SQL ,再写 Python 代码,再写 SQL ,…,会让你头都要裂了。 3 、 把数据模型用代码的方式表述来让你可以容易对它们进行版本控制。这样,你可以很容易了解数据层 的变动情况。 4 、 SQL 只能描述特定类型的数据字段。例如,大多数数据库都没有数据字段类型描述 Email 地址、 URL 。 而用 Django 的模型可以做到这一点。好处就是高级的数据类型带来高生产力和更好的代码重用。 5 、 SQL 还有在不同数据库平台的兼容性问题。你必须为不同的数据库编写不同的 SQL 脚本, 而 Python 的模块就不会有这个问题。
    • Django- 操作数据库 Django 建模常用命令行 : 一、创建 App python manage.py startapp appname 二、校验模型 python manage.py validate 三、输出模型 SQL 表结构 python manage.py sqlall appname 四、同步模型到库 python manage.py syncdb 五、根据已有数据自动产生 Model python manage.py inspectdb 或 python manage.py inspectdb > models.py 六、 Django 交互命令行 python manage.py shell 七、 DB 客户端 ( 命令行 )‏ python manage.py dbshell
    • Django- 操作数据库 Django 数据库常用操作 : 基本数据操作 (Django 自带 )>>> Django 基本数据访问 . swf 企业级数据库持久层 SQLAlchemy>>> SQLAlchemydocindex.html from notebook.main.models import NoteBook source = NoteBook.objects.all().order_by('-create_date')‏ print source[4].title+' '+source[4].content
    • Django-URL 配置 DjangoURL 配置指南 : DjangoURL 配置 . swf
    • Django- 通用视图 通用视图 ( generic views ): 它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的数据视图。 例子: urls.py from django.conf.urls.defaults import * from newtest.book.models import Publisher info_dict = { 'queryset': Publisher.objects.all(), } urlpatterns = patterns('', (r'^/?$', 'django.views.generic.list_detail.object_list', dict(paginate_by=10, **info_dict)), )‏
    • Django- 通用视图 book_list.html <table border=&quot;1&quot; width=&quot;500&quot;> <tr> <th> 姓名 </th> <th> 地址 </th> <th> 城市 </th> <th> 国家 </th> </tr> {% for person in object_list %} <tr> <td>{{ person.name }}</td> <td>{{ person.address }}</td> <td>{{ person.city }}</td> <td>{{ person.country }}</td> </tr> {% endfor %} </table> <table border=&quot;0&quot; width=&quot;500&quot;> <tr align=&quot;right&quot;> <td>{% if has_previous %} <a href=&quot;/address?page={{ previous }}&quot;> 上一页 </a> {% endif %} {% if has_next %} <a href=&quot;/address?page={{ next }}&quot;> 下一页 </a> {% endif %}</td></tr> </table> 详细参考 >>
    • Django- 高级应用 会话 Django cookie 、 session 框架的使用。 详细参考 >> 缓存机制 Django 下的 Memcached 、数据库缓存 、文件系统缓存 、本地存储器缓存、整站缓存、视图缓存、低级缓存 API 、上游缓存等等。 详细参考 >> 中间件 Django 下中间件说明、安装、方法等等。 详细参考 >> 国际化 Django 多国语言的部署。 详细参考 >> 部署平台 部署 Django 的生产环境平台。 详细参考 >> 安全 Django 下安全开发,包括 SQL 注射、跨站点脚本 (XSS) 、跨站点请求伪造 (CSRF) 、 Session 伪造 / 截取、 E-mail 头部注射、目录穿越、暴露出错信息等等。 详细参考 >>
    • Django- 案例分析 1 、 Django 与 Ajax 的结合。 2 、 Django 与 Flex 的结合。 3 、 << 天涯只看谁 >>
    • 谢谢大家!