基于 Django 的用户交流系统


http://www.paper.edu.cn - 1 - 基于 Django 的用户交流系统 胡子明,郭莉 北京邮电大学信息工程系,北京 (100876) E-mail: hzmangel@gmail.com 摘 要:本文首先介绍了 Django 这个优秀的敏捷 Web 开发框架,继而简单描述了敏捷开发 思想和现有软件工程思想的联系与区别,以及敏捷开发在 Django 中的体现,最后通过一个 用户交流系统开发的实例,介绍了 Django 开发过程的一般过程。 关键词: Django;Python;敏捷开发;Web 应用;用户交流系统 1. 引言 随着互联网的不断发展,已经有越来越多的应用从原有的服务器 /客户端架构转变成了 服务器/浏览器的架构。这样,对于普通用户而言,不需要使用特定的客户端,而只需要使 用所有系统都内置的网页浏览器就可以完成对服务器端的控制和查询,简化了操作,也方便 了在不同机器上使用。正因如此,web 应用的开发正在被越来越多的人们所关注。 Web 应用框架就是在这种情况下出现的 [1],它是一种用来协助开发动态网站、web 应用 和服务的软件框架。开发它的目的在于抽象出 web 开发中常用到代码段,操作等共有部分, 减少 web 应用开发的工作量。 Django 是使用 Python 开发的 Rails 方式的 Web 框架[2],它是一套开源的框架,虽然现 在的版本号还是 0.96,但是其上已经有许多成功的应用。 2. Django 框架 Django 是一个使用 Python 语言编写的, 高层的 Web 框架,它提倡使用快速开发的方法, 并且鼓励开发者编写洁净,实用的代码[3][4]。 2.1 Python 语言简介 Python 语言是一门面向对象的动态语言 [5][6],可以用于多种软件的开发。它可以很方便 的与其它的语言和工具结合。语言自带多种标准库,便于快速开发。 Python 语言经常被用 于脚本语言或者胶水(glue)语言,使现有的模块可以组合成为一整套系统。 2.2 Django 框架简介 Web 框架是指可以使构建动态 Web 站点变简单的软件,它抽象出 Web 开发中常见的问 题,并且对于常用的任务提供易于快速使用的捷径。一个好的 Web 框架可以满足下列需求: z 可以映射请求 URL 到特定的代码。 z 简化显示,验证和刷新 HTML 表单过程。 z 可以将用户提交的输入存储在内部数据结构中,以进一步方便处理。 z 将显示与内容分离,可以方便的控制存储层,如数据库的操作。 z 让开发者可以更高效的工作。 Django 可以很好的完成上面的需求,而且将显示、内容与数据分离符合敏捷开发中单 一职责,即一个模块只负责一件事情。 Django 框架使用的是 Python 语言,正是它为 Django 提供了支持快速开发的能力。 Python http://www.paper.edu.cn - 2 - 是一种解释型的语言,编写的代码可以不用编译,对于 Web 开发,在更改代码后可以方便 的点击刷新按钮来观看新的结果;另外,Python 是动态类型的语言,开发者不需要担心数 据类型的问题;除此以外,Python 提供的自省和元编程特性使得在运行时查阅或增加功能 成为可能[7][8][9]。 Django 鼓励使用松耦合来编写 Web 应用程序,网站的每个应用单元可以方便的交换, 它们之间的通信通过优美的 API 来进行。在上层,Django 提供了模板系统来完成显示层的 功能;在下层,Django 抽象了对数据库的操作;而网站的控制逻辑直接使用 Python 语言编 写。 3. 敏捷开发简介 3.1 传统软件工程 软件工程[10]是指研究大规模程序设计的方法,工具和管理的科学。对于一个复杂系统 来说,它的规模不仅仅体现在它本身包含有诸多关系复杂的模块,而且还包含有较长的开发 周期,在开发过程中人员之间的协作;所需面对的,除了分析,设计等技术问题,还有可行 性研究,人员组织等方面的问题。如果没有科学的方法作导引,是不可能在大型系统开发中 取得成功的。在历史上,曾经出现过软件危机,它主要表现在软件质量差;软件成本的增长 难以控制;软件开发进度难以控制;软件维护很困难等问题。 软件工程的目标在于研究一套科学的工程方法,并发展出与此相适应的工具系统,力求 用较少的成本获得较高质量的软件。为了用工程化的方式有效地管理研制软件的全过程,软 件系统的生命期分为六个阶段。分别是制定计划,需求分析与定义,软件设计,程序编写, 软件测试,运行及维护。 传统软件工程中,根据软件的生命周期,为软件开发方法制定了几个模式,主要用到的 是瀑布型和螺旋模型。 瀑布模型规定了软件过程中各生命周期自上而下,相互衔接的固定次序,如同瀑布流水, 逐级下落。但是软件开发的实践表明,这几项活动之间并非完全的自上而下,呈线性关系, 所以对于每个生命周期,都有可能对前一个过程作修改,然后返回到上一个过程中去。瀑布 模型为软件开发和维护提供了一种有效的管理模式,对于消除非结构化软件、降低软件复杂 度方面起到了显著的作用。但瀑布模型缺乏应有的灵活性,特别是无法解决软件需求不明确 或者不准确的问题,而且这一点在软件开发完成后才会被发现,很有可能开发出并不是用户 所想要的软件。 螺旋模型是一种风险分析的设计模型,它是瀑布模型与演化模型的结合,并且在传统的 三个周期的每一个周期中,都增加其它两个模型不具备的成分——“风险分析”,并形成迭代 过程,直到系统完成。螺旋模型沿着螺旋线旋转,在每个象限分别表达了四个方面的活动, 即: 1) 制定计划:确定软件目标,选择实施方案。 2) 风险分析:分析所选方案中存在的风险因素,考虑如何识别和消除风险。 3) 实施工程:实施软件开发 4) 客户评估:评价开发工作,提出修正建议 螺旋线自内向外每旋转一圈,就会开发出一个更完善的新的软件版本。适合于大型软件 的开发,是最为实际的方法。它吸收了软件工程中演化的概念。螺旋开发的特点是:风险较 http://www.paper.edu.cn - 3 - 早的发现。但是需要具有相当丰富的风险评估经验和专门知识,而且需要许多客户接受和相 信演化方法。 3.2 敏捷开发方法 如上面所说,软件工程产生最初产生于一个简单的类比 :人们发现研制一个软件系统, 同研制一台机器或建造一座楼房一样,有很多共同之处。从而希望参照借鉴机械工程、建筑 工程中的一些管理技术来进行软件开发,于是产生了软件工程。软件工程从机械工程和建筑 工程中继承的最核心的部分,就是确定一个明确的用户目标,然后开始逐步开发。 但是,软件工程和传统的机械工程和建筑工程之间还是存在有很大的差异,它们之间的 差异主要表现在两点: z 在传统行业中,一个工程按时按质按量完成其本身就具有价值;但是对于软件工程 来说,一个按质按量而没按时交付的软件其本身所具有的价值是很有限的,而一个 按质按量完成但不能满足需求的软件则根本没有价值。 z 软件行业中,目标客户的价值是随时在变的,也就是说,如果在项目初期做出一个 估算,在项目完成时,目标的需求可能和初期的估算差别很大,而不符合客户需求 的软件基本没有价值。 所以需要对软件开发中的管理做出改进,以使其更能适应软件开发的需求。一些业界专 家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原 则,即为敏捷开发(Agile Software Development)。在敏捷开发中,软件项目的构建被切分成 多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征 [11][12]。简言之,就 是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软 件一直处于可使用状态。不难看出,敏捷开发实际上大量借鉴了现有软件工程中的方法,例 如迭代与增量开发,所以敏捷开发实际上是对现有软件工程的一种改善,而不是创新。 3.3 敏捷开发在 Django 中的体现 Django 是一种 Rails 框架, 它很好的支持了敏捷开发。 Django 使用 Python 开发, 而 Python 语言内置了单元测试的库 [13][14][15],这样在编写网页的时候,可以方便的使用内置库来测试 网站的控制逻辑,为高质量软件打下了良好的基础。 Python 是一种解释型的语言,对代码 的更改可以实时显现,所以在某种程度上符合了持续集成的要求。而 Python 内置单元测试 的库也为重构的正确性提供了保证。 另外,对于一些通用的 Web 应用,如用户登录,用户登出,更改密码,显示数据信息 等,Django 都提供了内置的模块以供直接调用,加快了开发的进度,也降低了开发的难度 及出错的可能性。而 MVC 分离的架构 [16],可以很好的用于任务的分配,也保证了对于控制 逻辑代码的更改不会对上层用户界面及下层数据库接口造成太大的影响,降低了开发及维护 的成本及难度。 4. 用户交流系统 4.1 项目需求 对于一个大型企业来说,人员数量较多,而且在地域上可能分布在多个地点。此时,人 员之间的交流就存在障碍,而且,对于新加入的员工,可能很少有机会认识与自己不在一个 地方工作的老员工,也无从了解到老员工的信息,从而给进一步的交流带来困难。所以开发 http://www.paper.edu.cn - 4 - 一个企业内部的用户交流系统是非常有必要的。 这个系统主要分为两部分,一方面是员工基本资料的设置,像员工姓名,性别等内容; 另一方面是该员工自己定制的一些东西,例如喜欢的小说、音乐、技术等,而且此部分提供 类似博客的功能,员工可以随时编辑、删除自己已有的文章,也可以发新的文章,推荐等。 这样可以保存一系列员工的文章,方便别人了解这个员工。另外,系统还给每一个注册的用 户提供了一个类似信箱的设计,用户可以通过这个信箱和其它用户交流。另外,为了方便用 户,提供了使用 MSN,Gtalk 等聊天工具操作系统的简单接口,这样一些简单的操作就可以 通过聊天软件完成了。 使用 Django 框架,可以将模型——视图——控制器(MVC: Model-View-Controller)三者 分离,在开发过程中,模型负责下层数据库结构的设计,视图负责显示给用户界面的设置, 而控制器则是系统内部的逻辑实现。在 Django 中,分别由不同的文件负责。 4.2 系统结构设计 首先需要设计的是系统的URL映射,每个员工在数据库中存储时都会对应有一个ID号, 将这个 ID 号作为 URL 第二段的内容,然后将对员工页面的所有访问映射到之后,即 URL 地址类似 http://domain/id/info,通过使用 Django 的 URL 映射机制,可以很方便的完成这个 工作。在取到员工的 ID 之后,访问数据库,取得请求的数据,并返回给客户端浏览器。而 具体需要获取的信息,由 id 之后的字符串决定,例如员工的基本信息,员工喜欢的小说, 员工的博客页面等。 如果员工不希望使用系统提供的博客系统,或者是比较习惯原先的博客系统,可以在后 台使用 RSS 聚合同步员工原先的博客,在实现上,使用的是第三方库 feedparser,或者也可 以手工使用 DOM 解析 RSS 的 XML。在获取到更新后,将其插入数据库中,以备后续操作。 聊天软件的集成可以通过使用聊天机器人来实现,MSN 和 Gtalk 的协议都是公开的, 可以使用现有的模块完成对客户端的功能,用户只需要在聊天软件中增加特定好友,即可以 使用对系统的操作。Gtalk 的机器人可以使用 Python 语言的 XMPP 模块完成,MSN 也有成 熟的第三方模块可以使用。在服务器端,聊天机器人的守护进程可以响应用户发出的请求, 再将其转换为服务端的原语或请求,接收到返回结果后再将结果返回给用户的聊天软件。由 于聊天机器人的守护程序和服务器端可以看作是在一台机器上的,所以可以直接通过系统调 用来完成对于服务器信息的更新。 4.3 数据库设计 对于一个网站系统来说,数据库的设计是至关重要的一个环节。一个设计良好的数据库, 不仅可以保证系统的稳定运行,也可以将系统的负载降至最低,减少服务器的负担。 Django 框架将数据库的操作抽象成一套 API,Django 会通过第三方模块将调用的 API 转换为特定 数据库系统的 SQL 语句,完成对数据库的操作。 系统的主要数据是员工,所以以员工数据为中心来设计其它相关数据。在 Django 中, 一个类对应数据库中的一张表,而类中的成员变量就是表的字段。在员工类中,主要包含有 员工 ID,员工工号,员工姓名以及其它一些基本信息,其中员工 ID 是由数据库系统自动生 成的,同时也作为员工记录的主键;而其它信息都是可以人为修改的。同时,在员工数据中 加上元数据字段,在存储时使用 Python 内建的序列化库 Pickel 将数据序列化后存储,用以 存放一些临时添加的数据,这样可以达到在不需要改动数据库表结构的基础上更改数据的目 http://www.paper.edu.cn - 5 - 的。 第二个需要构建的表就是员工的文章数据,主要的字段有文章的 ID 号,文章的标题, 文章的内容,文章的作者,还有一些文章的基本信息,如文章的发布时间,修改时间,字数 等信息,这些信息也可以考虑使用类似员工数据表中序列化的方法来实现。在这个表中,文 章的作者是使用外键与员工数据表相关联的,在 Django 中使用的是 ForeignKey 来设置这种 关联关系的。 还需要构建一张表用以存放员工信箱的数据,主要的字段有消息的 ID,消息的发送方, 消息的接收方,消息的发送时间,消息的状态,以及消息的内容等。其中消息的发送方和消 息的接收方都使用 ForeignKey 和员工数据库中的记录相关联。 在查询时,通过多表联合查询可以在限定的条件下得到符合条件的结果,如果查询的数 据量较大,可以通过构建临时表来实现,即将两张或多张表的内容展开后在内存中构建一张 临时的数据表,通过占用存储的方式来加快查找速度。 另外还有一些辅助的表,例如存放上传文件记录,日志记录,用户权限管理等,在设计 时也需要考虑到数据冗余和存储容量两者之间的平衡。 4.4 界面设计 对于一个 Web 系统而言,界面的好坏直接关系到用户的体验。考虑到现如今机器的处 理能力在提高,所以在界面上使用了全 Ajax 的架构,使用 Extjs 库在用户浏览器中构建出类 似桌面应用系统的界面,给予用户更好的体验。 5. 下一步的工作 这个系统目前仅仅是在内部使用,所以在后台程序的设计中,还存在着一些冗余或者效 率较低的情况,在下一步的工作中,需要继续优化系统,保证系统的稳定性和有效性;另外, 对于前端的界面,在多浏览器支持上还没有做更多的测试,这也是需要完善的地方。 6. 小结 本文给出了使用 Django 系统开发交流系统的实例,通过对实例的介绍,简要描述了 Django 系统中 MVC 三层的结构,并通过实际的设计描述了 Django 的开发流程。 Django 使 用了一些敏捷开发的思想,加快了 Web 开发的流程,同时也增强了代码的重用度,减小了 Web 开发中的工作量。 Django 对于下层如数据库等元素的抽象也保证了在开发过程中对数 据操作的正确性以及有效性,减少了手工编写 SQL 代码可能出现的错误。所以,Django 是 Web 开发中一款优秀的框架。 参考文献 [1] wikipedia.Web application framework[OL].http://en.wikipedia.org/wiki/Web_application_framework, 2007.12. [2] Thomas D., Hansson, D.H.Agile Web Development with Rails,Second Edition [M] .林芷薰.北京:电 子工业出版社,2007.6。 [3] Django community.The Django Book[OL] .http://www.djangobook.com/,2006。 [4] limodou.Django Step by Step[OL] .http:// www. woodpecker. org.cn/obp/django/ django-stepbystep/ newtest/doc/, 2006.8。 [5] Python Software Foundation .Python Introduction[OL] .http://www.python.org/,2007。 [6] Python Software Foundation .About Python[OL] .http://www.python.org/about/,,2007。 [7] Alex Martelli.Python in a Nutshell , 2nd Edition[M].O'Reilly, 2003.3。 http://www.paper.edu.cn - 6 - [8] David Ascher, Mark Lutz.Learning Python, Second Edition[M].O'Reilly, 2003.12。 [9] Alex Martelli, David Ascher.Python Cookbook[M].O'Reilly, 2002.7。 [10] 郑人杰,殷人昆,陶永雷.实用软件工程(第二版)[M].北京:清华大学出版社,2002.7。 [11] Kent Beck,Cynfhia Andres.Extreme Programming Explained : Embrace Change (2nd Edition) [M] .雷剑 文,陈振冲,李明树.北京:电子工业出版社,2006.5。 [12] Robert C. Martin.Agile Software Development, Principles, Patterns, and Practices [M] .邓辉.北京:清华 大学出版社,2006.12。 [13] Kent Beck.Test-driven development: by example [M].崔凯.北京:中国电力出版社,2004.3。 [14] Joshua Kerievsky.Refactoring to Patterns [M] .杨光,刘基诚.北京:人民邮电出版社,2006.12。 [15] Martin Fowler.Refactoring: Improving the Design of Existing Code[M].侯捷,熊节.北京: 中国电力出 版社,2003.8。 [16] wikipedia.Model-view-controller[OL].http://en.wikipedia.org/wiki/Model-view-controller,2007.12. A Django Based User Communication System Hu Ziming,Guo Li MITC,School of Information and Engineering,BUPT,Beijing (100876) Abstract This paper introduces an excellent Web application framework, Django, then describes the agile development method, and compares it with current software engineer method, also show how the method is used in Django framework. At last, describe the flow of development with Django through a real example. Keywords:Django;Python;agile software development;web application;user communication system 作者简介: 胡子明,男 1984 年生 安徽人 硕士研究生 主要研究方向为无线多媒体通信; 郭 莉,女 1968 年生 陕西人 北京邮电大学副教授,硕士生导师 主要研究方向为多媒体 通信和嵌入式系统等。
还剩5页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf