django实战系列.doc
《django实战系列.doc》由会员分享,可在线阅读,更多相关《django实战系列.doc(106页珍藏版)》请在三一办公上搜索。
1、Django实战系列(博客园专家ThinkInside 2012年初原创)Django实战系列的内容:0. 如果你以前没有接触过Django,你可能需要这些准备知识:URLconf+MTV:Django眼中的MVCDjango第一步1. 实战系列的开发目标需求分析和设计2. 从Model开始创建第一个模型类3. Model之外,你还需要知道什么Django也可以有scaffoldscaffold生成物分析4. 关于界面:静态资源,模板,及其使用引入bootstrap,设置静态资源对比RoR和Django的模板系统改造ProductList界面5. 逻辑层对比RoR与Django的输入校验机制实
2、现Product的输入校验单元测试6. 变更修改Model类增加目录页,设定统一布局7.关于会话在session中保存购物车让页面联动起来8. ajaxDjango实现RESTful web serviceDjango+jqueryajax !9. 另一轮变更提交订单自定义many-to-many关系,实现Atom订阅分页(Pagination)10. 用户和权限使用内置的Amin管理用户处理登录和注销权限控制URLconf+MTV:Django眼中的MVC MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。其
3、中: M 管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)。 C 接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带。 V 负责把数据格式化后呈现给用户。在Agile Web Development with Rails中有这样一张图对MVC模式进行了很好的解释:Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式:M 代
4、表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。需要注意的是,不能简单的把 Django 视图认为是MVC控制器,把 Django 模板认为MVC视图。区别在于: Django 视图 不处理用户输入,而仅仅决定要展现哪些数据给用户; Django 模板 仅仅决定如何展现Django视图
5、指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。至于MVC控制器部分,由Django框架的URLconf来实现。URLconf设计非常巧妙,其机制是使用正则表达式匹配URL,然后调用合适的Python函数。虽然一开始有些不习惯,但是你很快就会喜欢上它,因为URLconf对于URL的规则没有任何限制,你完全可以设计成任意的URL风格,不管是传统的,RESTful的,或者是另类的。Django第一步对于一个web框架,掌
6、握了三部分的内容,就可以说是迈出了第一步。1. 准备开发环境2. 创建一个工程,并运行3. 开发hello world应用1. 准备环境 首先应该是安装python和django。这点官方网站有很详细的说明,网上也有很多教程,这里就不再重复了,只是表达一个对操作系统的观点: Mac OS:对程序员和用户都很友好 Linux: 对程序员很友好 Widows:对用户貌似友好 到底使用哪个操作系统,仁者见仁。 然后是开发工具的选择。建议抛弃IDE,使用一个好的文本编辑器。强烈推荐vim。但如果你选择Emacs,我无话可说。2. 创建工程 Django作为一个web框架,第一步应该是能够在浏览器中看到
7、页面。如果已经安装好环境的话。 首先创建工程:django-admin.py startproject depot,即开始创建名为depot的工程。 与rails相比,过程很安静,结果很干净。如下: depot/ _init_.py manage.py settings.py urls.py这几个文件的作用如下: _init_.py :Python的模块定义文件。 这是一个空文件,一般你不需要修改它。 manage.py :一个命令行工具,生成这个文件仅仅是为了方便。可以通过python manage.py help 查看该工具的功能。完全不需要编辑这个文件。 settings.py :该 D
8、jango 项目的设置或配置。 urls.py:Django项目的URL设置。与rails不同,django初始工程的文件很少,可以很容易地阅读所有的代码。但这些文件已经构成了一个可运行的Django应用。进入工程目录并运行该工程:cd depot/python manage.py runserver可以看到一些提示信息:Validating models.0 errors foundDjango version 1.3, using settings depot.settingsDevelopment server is running at http:/127.0.0.1:8000/Qui
9、t the server with CONTROL-C.29/Jan/2012 02:09:17 GET / HTTP/1.1 200 2049此时web server(开发环境!)已经运行了,用浏览器访问http:/127.0.0.1:8000/,可以看到如下的界面:说明Django已经开始工作了。3. hello Django! 与rails不同,django不需要生成controller,helper, view 等等一大堆文件,要实现一个hello程序,只需要几行代码。Django Web应用中通常包含URLconf, view, template, model 四个部分(参考URLc
10、onf+MTV:Django眼中的MVC)。但这些部分不是完全必需的。比如我们要实现一个最简单的 hello, Django!, 只需要定义URLconf和view即可。让我们把“需求”明确一下,hello,Django!实现如下功能:在浏览器中输入http:/127.0.0.1:8000/hello, 显示“hello Django!”。首先要实现一个视图(view) 来响应请求。在Django中视图是一个函数,该函数接受一个HttpRequest参数,并返回一个HttpResponse。我们可以在任何地方定义这个函数,但通常会放在Django app 的 views.py 文件中。在hel
11、lo,Django中我们不需要创建一个Django app(因为不需要model),所以可以在project 目录中创建一个view.py 文件,并定义hello(request)视图函数:depot/views.py:pythonview plaincopy1. fromdjango.httpimportHttpResponse2. 3. defhello(request):4. returnHttpResponse(hello,Django!)接下来是将前面定义的URL 映射到 这个视图函数。这是由URLconf完成的。URLconf的本质是 URL 模式以及要为该 URL 模式调用的视图
12、函数之间的映射表。打开生成的urls.py文件,先在文件前面import刚才创建的view,然后在tuple类型的变量urlpatterns中加入hello的映射关系:pythonview plaincopy1. fromdjango.conf.urls.defaultsimportpatterns,include,url2. fromdepot.viewsimporthello3. 4. urlpatterns=patterns(,5. url(rhello/$,hello),6. )此时访问 http:/127.0.0.1:8000/hello, 将会显示 hello, Django!UR
13、Lconf理解起来也很容易,即 urlpatterns中的每一项是一个二元组(正则表达式,视图函数)。当Django 接收到HTTP请求的时候,从urlpatterns中找到匹配的表达式,并将请求发生给对应的视图函数,最后视图函数返回一个HTTP响应,交给Django处理。如此而已。至此,Django的第一步已经迈出,你至少已经可以开始CGI风格的web开发了。Django实战(1):需求分析和设计Depot是Agile Web Development with Rails中的一个购物车应用。该书中用多次迭代的方法,逐步实现购物车应用,使很多人走上了rails开发的道路。遗憾的是Django世
14、界中好像没有类似的指引,也许是因为pythoner 不需要具体的例子。但是如果通过这样一个例子能够让更多的人加入pythoner的队伍,也是一大幸事。本文首先回顾一下depot的需求,在后续内容中将会按照Agile Web Development with Rails中的迭代进度,逐步用Django实现depot购物车应用。在原例子的基础上,还会增加一些新的内容,以适应企业级应用的开发。同时,会尽量展示敏捷开发的特性。原书中,初始阶段的需求整理如下:角色 买方,卖方。用例 买方:浏览产品,创建订单 卖方:管理产品,处理订单,管理发货界面设计买方界面包括: 目录页:可以选择一个产品,选中产品会打
15、开购物车页,同时该产品被加入购物车 购物车页:显示所有已选择的产品,可以返回分类页,也可以进入支付页进行支付 订单页:填写一些要素信息,确认支付后显示收据页 收据页:通知买方订单已被接收 买方界面流程如下图所示:卖方界面包括: 登录页:卖方要登录后才能使用系统,登录后通过菜单选择其要使用的功能 菜单页:选择维护产品或者查看订单 创建产品页:用于加入新的产品 产品信息页:显示已经加入的产品,可以进行修改或者删除 订单页:显示订单信息,可以忽略或者处理 卖方界面流程如下图所示:领域模型从界面设计中可以很容易得出初步的模型,如下图:以上,就是开始阶段所能得到的“需求”。尽管其中还有一些不确定的因素,
16、但是敏捷方法认为应该尽快开始开发,这些不确定的因素会在后续的迭代过程中逐步明确。接下来,就可以开始第一轮迭代开发了。Django实战(2):创建第一个模型类从模型开始开发似乎是个好主意。一方面模型是整个应用的核心,实现了应用的业务数据和对业务数据进行操作的约束,而视图和模板只是向用户提供操作和展现这些数据的界面;另一方面模型相对于系统的其他部分更加稳定,将模型先确定下来有助于系统其他部分的实现。DDD(领域驱动设计)更进一步将模型中的核心对象抽取出来作为“领域模型”。从Depot应用来看,产品(Product) 应该是模型中的核心对象之一。就让我们先来实现Product模型。创建app我们可以
17、从Django第一步中实现的工程开始。在继续之前,还要进行一些准备工作。Django约定必须要创建app才能使用模型。这也是Django的哲学之一:Django认为一个project包含很多个Django app;project提供配置文件,比如数据库连接信息、 安装的app清单、模板路径等等;而一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。app可以在多个project之间很容易的复用。比如Django自带的注释系统和自动管理界面。所以我们在原有工程的基础上还需要创建一个app。现在假设我们只需要一个app,并将其命名为depotapp。创建应
18、用的脚本也是使用project目录下的managy.py:$python manage.py startapp depotapp就会在工程目录下创建一个depotapp目录:depotapp/ _init_.py models.py tests.py views.py用python代码定义数据库在Django的第一印象中介绍过,Django的设计是 以Python类的形式定义数据模型。之所以没有采用rails的运行时自动获取数据库schema的”魔术方式“,是出于以下的考虑: 1. 效率。运行时扫描数据库可能会带来性能问题。 2. 明确性。只通过Model类就完全知道数据库中有哪些字段,而不需
19、要再切换到migration或schema文件中去查看,更不需要去查看数据库结构。 3. 一致性。你看到的只是Python代码,完全不需要将大脑切换到”数据库模式“,能极大提高开发效率。 4. 版本控制。rails中的数据库结构版本保存在一个个的migration文件中,这简直就是版本管理的”反模式“。Django的方式是管理Model代码文件的版本。 5. 可扩展性。可以定义数据库中不存在的”字段类型“。比如Email,URL,等等。当然,Django也提供从现有数据库表中自动扫描生成模型的工具。so,Agile Web Development with Rails中的做法是先创建数据库表:
20、sqlview plaincopy1. droptableifexistsproducts;2. createtableproducts(3. idintnotnullauto_increment,4. titlevarchar(100)notnull,5. descriptiontextnotnull,6. image_urlvarchar(200)notnull,7. pricedecimal(10,2)notnull,8. primarykey(id)9. );然后再生成scaffold(包括model,controller,test,4个views等等)。而Django的做法是,编写下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- django 实战 系列

链接地址:https://www.31ppt.com/p-2388853.html