SlideShare une entreprise Scribd logo
1  sur  24
敏捷开发   主讲:刘天斯
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 比较 ,[object Object],[object Object],[object Object],[object Object],[object Object]
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>>> SQLAlchemydocndex.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 、 << 天涯只看谁 >>
谢谢大家!

Contenu connexe

En vedette

阿里巴巴运维自动化的探索与规划
阿里巴巴运维自动化的探索与规划阿里巴巴运维自动化的探索与规划
阿里巴巴运维自动化的探索与规划mysqlops
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台drewz lin
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台liuts
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomihdksky
 
The simplethebeautiful
The simplethebeautifulThe simplethebeautiful
The simplethebeautifulmysqlops
 
Performance Testing REST APIs
Performance Testing REST APIsPerformance Testing REST APIs
Performance Testing REST APIsJason Weden
 
API Best Practices Webinar: Metrics - What to Measure
API Best Practices Webinar:  Metrics - What to MeasureAPI Best Practices Webinar:  Metrics - What to Measure
API Best Practices Webinar: Metrics - What to MeasureApigee | Google Cloud
 
Webcast: Pragmatic REST: The Next Generation
Webcast: Pragmatic REST: The Next GenerationWebcast: Pragmatic REST: The Next Generation
Webcast: Pragmatic REST: The Next GenerationApigee | Google Cloud
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Weibo Corporation
 
REST API testing with SpecFlow
REST API testing with SpecFlowREST API testing with SpecFlow
REST API testing with SpecFlowAiste Stikliute
 
How to Automate API Testing
How to Automate API TestingHow to Automate API Testing
How to Automate API TestingBruno Pedro
 
API Best Practices
API Best PracticesAPI Best Practices
API Best PracticesSai Koppala
 
Why API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOpsWhy API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOpsJohn Musser
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲ChinaNetCloud
 
API Technical Writing
API Technical WritingAPI Technical Writing
API Technical WritingSarah Maddox
 
Adapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet KapoorAdapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet KapoorApigee | Google Cloud
 
Microservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices SuccessMicroservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices SuccessApigee | Google Cloud
 

En vedette (20)

阿里巴巴运维自动化的探索与规划
阿里巴巴运维自动化的探索与规划阿里巴巴运维自动化的探索与规划
阿里巴巴运维自动化的探索与规划
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomi
 
The simplethebeautiful
The simplethebeautifulThe simplethebeautiful
The simplethebeautiful
 
Performance Testing REST APIs
Performance Testing REST APIsPerformance Testing REST APIs
Performance Testing REST APIs
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
A Checklist for Every API Call
A Checklist for Every API CallA Checklist for Every API Call
A Checklist for Every API Call
 
API Best Practices Webinar: Metrics - What to Measure
API Best Practices Webinar:  Metrics - What to MeasureAPI Best Practices Webinar:  Metrics - What to Measure
API Best Practices Webinar: Metrics - What to Measure
 
Webcast: Pragmatic REST: The Next Generation
Webcast: Pragmatic REST: The Next GenerationWebcast: Pragmatic REST: The Next Generation
Webcast: Pragmatic REST: The Next Generation
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
 
REST API testing with SpecFlow
REST API testing with SpecFlowREST API testing with SpecFlow
REST API testing with SpecFlow
 
How to Automate API Testing
How to Automate API TestingHow to Automate API Testing
How to Automate API Testing
 
API Best Practices
API Best PracticesAPI Best Practices
API Best Practices
 
Why API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOpsWhy API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOps
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
 
API Technical Writing
API Technical WritingAPI Technical Writing
API Technical Writing
 
Adapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet KapoorAdapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet Kapoor
 
Microservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices SuccessMicroservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices Success
 
RESTful API Design, Second Edition
RESTful API Design, Second EditionRESTful API Design, Second Edition
RESTful API Design, Second Edition
 

Similaire à Django敏捷开发 刘天斯

4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
Ext Js开发指导
Ext Js开发指导Ext Js开发指导
Ext Js开发指导clong365
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较Adam Lu
 
Django Firstofhexu
Django FirstofhexuDjango Firstofhexu
Django Firstofhexuhexuotzo
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
Django development
Django developmentDjango development
Django developmentloveyudu
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)Wei Sun
 
Javascript代码注释及文档生成
Javascript代码注释及文档生成Javascript代码注释及文档生成
Javascript代码注释及文档生成fangdeng
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027Wei Sun
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程dyzm_2000
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 modelsEkman Hsieh
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版昌里大金猪 Luke
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 

Similaire à Django敏捷开发 刘天斯 (20)

4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
Ext Js开发指导
Ext Js开发指导Ext Js开发指导
Ext Js开发指导
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较
 
Django Firstofhexu
Django FirstofhexuDjango Firstofhexu
Django Firstofhexu
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
Django development
Django developmentDjango development
Django development
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
Javascript代码注释及文档生成
Javascript代码注释及文档生成Javascript代码注释及文档生成
Javascript代码注释及文档生成
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 models
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
Go
GoGo
Go
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 

Django敏捷开发 刘天斯

  • 1. 敏捷开发 主讲:刘天斯
  • 2. Python 简介 Python 是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构,以及类别的使用。 Python 揉合了简单的语法和强大的功能。它的语法表达优美易读。它具有很多优秀的脚本语言的特点:解释的,面向对象的,内建的高级数据结构,支持模块和包,支持多种平台,可扩展。而且它还支持交互式方式运行,图形方式运行。它拥有众多的编程界面支持各种操作系统平台以及众多的各类函数库。利用 C 和 C++ 可以对它进行扩充。个别的应用软件如果需要有一个可程序化界面也可以利用它来做为扩展语言用。最后, Python 的可移植度非常高 : 它可以在许多的 Unix 类平台上运行,在 Mac,MS-DOS, 视窗 Windows , Windows NT , OS/2 , BeOS ,至 RISCOS 上都有相关的 Python 版本。
  • 3. 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 的影响力之巨大。
  • 5. 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 的某些部分。
  • 6. Django- 安装 / 配置 >>> 配制 Django 平台 . swf
  • 7. 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()‏
  • 8. 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})‏
  • 9. 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>
  • 10.
  • 12. 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/
  • 13. Django- 模板系统 django 模板 是一个用来分离文档的表示和数据的文本文件。一个模板定义了占位符和各式基本逻辑(即模板标签 (template tag) )来定义文档应该如何显示。通常,模板用来生成 HTML ,但是 django 模板 同样能够生成各种基于文本 (text-based) 的各式。 包括元素 : 变量、 过滤器、标签、模板继承、内建标签、自定义标签及过滤器库。 详细进入》》 Django - 模板系统介绍 . swf
  • 14. 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 语句 理想状况下数据库服务器应该是抽象的,替换数据库应该只在一个地方设置。
  • 15. 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})  
  • 16. 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 的模块就不会有这个问题。
  • 17. 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
  • 18. Django- 操作数据库 Django 数据库常用操作 : 基本数据操作 (Django 自带 )>>> Django 基本数据访问 . swf 企业级数据库持久层 SQLAlchemy>>> SQLAlchemydocndex.html from notebook.main.models import NoteBook source = NoteBook.objects.all().order_by('-create_date')‏ print source[4].title+''+source[4].content
  • 19. Django-URL 配置 DjangoURL 配置指南 : DjangoURL 配置 . swf
  • 20. 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)), )‏
  • 21. 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> 详细参考 >>
  • 22. Django- 高级应用 会话 Django cookie 、 session 框架的使用。 详细参考 >> 缓存机制 Django 下的 Memcached 、数据库缓存 、文件系统缓存 、本地存储器缓存、整站缓存、视图缓存、低级缓存 API 、上游缓存等等。 详细参考 >> 中间件 Django 下中间件说明、安装、方法等等。 详细参考 >> 国际化 Django 多国语言的部署。 详细参考 >> 部署平台 部署 Django 的生产环境平台。 详细参考 >> 安全 Django 下安全开发,包括 SQL 注射、跨站点脚本 (XSS) 、跨站点请求伪造 (CSRF) 、 Session 伪造 / 截取、 E-mail 头部注射、目录穿越、暴露出错信息等等。 详细参考 >>
  • 23. Django- 案例分析 1 、 Django 与 Ajax 的结合。 2 、 Django 与 Flex 的结合。 3 、 << 天涯只看谁 >>