基于django的图书分享系统的设计与实现-

发布时间:   来源:文档文库   
字号:
目录
一、引言 ............................................................................................................................... 3 二、Django技术基础 ............................................................................................................ 3 (一)Python语言 ........................................................................................................ 4 (二)PythonWeb开发框架 .................................................................................... 4 (三)Django框架技术 ................................................................................................. 5 1.MVT架构 ............................................................................................................ 5 2.Form表单类 ........................................................................................................ 6 3.基于类的通用视图 ............................................................................................... 6 4.自动管理接口
...................................................................................................... 7 三、系统的设计与实现 ......................................................................................................... 7 (一)系统总体设计 ..................................................................................................... 7 1.内容管理相关数据模型设计 ................................................................................ 7 2.数据库实现 .......................................................................................................... 9 3.Web设计 ............................................................................................................. 9 结论 .................................................................................................................................... 13 参考文献: ......................................................................................................................... 14 .................................................................................................................................. 14
0

基于Django的图书内容分享管理系统的设计与实现
谈鑫
数学与信息学院 信息管理与信息系统专业2010 指导老师:杨艳梅

摘要:在互联网日益发达的今天,无论是企业、事业单位、政府机构,还是学校、个人都将网络作为传播、管理信息的重要手段。面对图书馆数以百万的图书,文认为,建立一个图书分享网站有利于同学更快、更轻松的找到想要的书籍。 近年来,基于开源的内容管理系统迅速兴起[1],它不仅帮助人们快速建立发布信息的网络平台,而且对网站的内容和资源进行有效的整合和管理。在这种背景下,本文提出了运用Django框架,Python为主要开发语言开发快速发布图书内容分享的信息管理系统的方案。从技术、经济、社会三方面分析了可行性,技术方面,采用Django框架、MVC模式、Python语言、MySQL数据库;经济方面,采用开源的“LAMP”软件;社会方面,研发一套图书内容分享系统,可以使同学快速找到需要的书籍。然后创建了应用项目,进行数据库的配置,用models.py具体实现系统的物理数据模型,同时生成了相应的数据表。在Web计时,先简述了Django请求响应流程,将HTTP请求通过与预定义的URLconf匹配,转向相应的控制层,调用特定 View函数处理。以基本模板为基础,利用Django特定的模板标记嵌入网页页面中,并添加页面逻辑完成页面设计。同时利用Django内置的管理界面进行数据编辑和数据管理。
整个系统最终完成了:基于模板的网站页面和管理页面,及时快速发布图书信息,对图书信息的评级、评论等功能。 关键字:Django;内容管理;
1



Books share content management system based on Django Tanxin Information management and information system of Mathematics and information Department Grade 2010
Instructor: Yang Yanmei Abstract: Today, Internet technology is used widely by enterprises, institutions, school, government or individuals as tool to release and manage information.

Face to millions of library books, the paper considers that the establishment of a book sharing sites in favor of students faster and easier to find the desired book. In past several years, the open content management system is booming. Not only it helps to rapidly build the platform of releasing the information, but also it manage and integrate the contents and resource of the website. On this background we propose to use Django framework to Python as the primary development language developed quickly publish book content sharing solutions for information management system. There are three feasibility analysis. Technically, using Django, MVC, Python, MySQL. Economically, using free, open source LAMP software. Society, Developed a books content sharing management system that allows students to quickly find the required books. Then create the application project, configure the database, with models.py concrete realization of the physical data model of the system, while generating the corresponding data sheet. In Web design, first outlined Django request response process, the HTTP requests through predefined URLconf match, turn the corresponding control layer, call a specific function to deal View. Basic templates as the basis, Specific use Django template tags embedded in Web pages, and add the page to complete the page design logic. At the same time, we take advantage of the built-in Django admin interface for data editing and data management. The final completion of the entire system: the web-based administration pages and page templates, quick and timely release of information, information on books ratings, reviews and other features. Key words: Django; content management 2


一、引言
随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统、编译工具链、数据库、WEB服务器、移动操作系统等各个方面已经成 为主流。而且许多企业利用开源软件形成了独特的商业模式。比如谷歌的 Android 操作系统, 2007 年开源发布第一个版本起,到今天已经发展到 4.4版本,占据了智能手机操作系统一半以上的市场份额,谷歌也通过 Android 作系统在移动互联网这一新兴行业中占据了领先和主导地位。再比如在服务器端广泛使用的关系型数据库 MySQL在以开源软件和商业许可并行的模式下,得到了快速发展,并在 2008 年作价 10 亿美金由 Sun 收购(后者又在 2009 年被 Oracle 公司以 74 亿美金的高价收购)相反,以前一直和开源软件做斗争的微软公司,却因为无法快速推出适应市场的 Windows Phone 操作系统,在移动互联网竞争中处于下风。为顺应潮流,微软也开始拥抱开源,比如向Samba项目贡献代码,放弃自己研发多年的大数据项目而选择 Hadoop为其大数据的核心等。
显然,纵观 IT 行业这二十多年的发展,开源软件从黑客的理想之国,已经形成了一股推进计算机及相关行业不停进步的巨大力量。很多人可能尚未意识到,我们使用的电脑中运行 有开源软件,手机中运行有开源软件,家里的电视也运行有开源软件,甚至小小的数码产品(如电子相框)中也运行有开源软件,尤其是互联网服务器端软件,几乎全部是开源软件。毫不夸张地说,开源软件已经渗透到了我们日常生活的方方面面。正是在这样的背景下,本文选择了使用开源的Python语言作为主要开发语言,使用Django框架来完成系统的设计。
从技术可行性来说,本系统对于用户仅需要一台装有浏览器的计算机,即可完成大多数操作,对用户个人电脑本身没有特殊要求,一般个人电脑几个满足要求。开发软件主要采用目前计算机网页设计流行的LAMP即为LinuxApacheMySQLPython这些用来搭建动态网站的开源软件,拥有强大的网站解决方案。采用Django框架对于图书信息的发布是非常快捷便利的。用户利用这些开源软件丰富的解决方案可以快速开发系统。
从经济可行性来说,本系统使用开源免费的“LAMP”软件,这些软件与开源软件许可证结合在一起,软件费用的开支几乎为零费用,费用开支主要用于解决Web服务器、数据库服务器和人工研发费用,这些费用是网站开发维护中不可避免的费用。
从需求可行性来说,由于同类书籍的种类越来越多,如何选择一本好书显得至关重要,本文的研究便是希望设计出一套可以让专家学者分享出相关专业的好书籍的内容管理系统。 二、Django技术基础
图书内容分享管理系统属于轻量级的管理信息系统,为了减少花费,所以采用快速而免费的Web开发技术。传统的重量级开发技术ASP.NETJ2EE显然不适合轻量级的快速开发。故采用基于Python开源的Django框架[2]使用Django框架可以使开发者将精力集中在主要的业务流程或核心子系统的实现上,一些基本辅助功能完全可以由Django自动实现,开发者不必浪费过多的精力在辅助功能的实现上,极大程度提高了开发者的效率,减少项目的开发周期。同时由于Django是免费开源框架,部署时使用的ApacheMySQL也都是免费产品,可以使项目以较低的投资获得较高的回报。通过使用Django将大量需要管理人员手工做的工作转变为系统自动执行,提高了管理效率,同时通过使用Django的多3

种有针对的技术手段,可以对工作人员的工作进行有效的约束,使工作人员可以无安全遵守工作流程。
在本文展开讨论具体的应用之前,首先对后文将要用到的Python语言和Django框架技术做简要的介绍,并以此作为后面章节的理论基础。 (一)Python语言
Python是一种解释型的,面向对象的,带有动态语义的高级程序设计语言。自从Guido van Rossum20世纪90年代初创造这门语言以来,他的支持者就一直在稳步增加,而且近些年来,社区对他的兴趣也日益浓厚[1].Python是一种通用编程语言,所以Python的特点是可以用于几乎所有的软件开发领域。在任何地方Python都能成为一个最佳解决方案的一部分[2]在得过汉诺威举办的CeBIT2009大会上,Python获得了Linux New Media颁发的最佳开源编程语言奖,以肯定Python一直以来在提升语言功能性和易用性方面做出的贡献[3]
Python的语法非常简洁,它不使用C/C++/Java等语言惯用的大括号作为划分程序块的标记,也不使用分号作为一个语句的结尾,而是使用空白缩进作为程序段的划分标准,相同级别的代码段必须拥有相同的空白缩进。如此一来,就强制程序员编写代码时保持良好的代码缩进。所以用Python编写的程序都具有良好的格式,非常易读,同时帮助程序员节省了敲击无用的大括号和分号所浪费的时间。Python同时拥有强大的字符串处理能力,支持通用的正则表达式。由于Web程序会有大量的用户输入,需要经常用到字符串操作,所以优秀的字符串处理能力对于Web程序后端处理是不可或缺的。Python在这个方面非常适合Web开发,相比传统的PHPJava以及ASP.NET而言,Python完成同样的字符串处理要求所要编写的代码仅仅是传统技术的1/3甚至更少。
Python还拥有多种实现版本,通常被提及Python实际上是CPython,也就是用C语言实现的Python而随着Python越来越受到开发者的欢迎,现在Python[4]已经拥有了Jython,IronPython等其他实现。其中JythonPythonJava实现,而IronPythonPython.NET实现,未来也许会有更多的实现版本,但是仅仅从当前看,Python已经深入到了传统的企业级应用开发领域,这些实现已经为传统应用使用Python进行改进铺平了道路。
当前,Python拥有两个版本分支,分别是2.x版和3.x版。2.x版的最新版本号是2.7.1,3.x版的最新版本号是3.33.x版与2.x版是并行更新的,只不过3.x版对2.x版进行了改进,不在兼容2.x版的程序。2.x版的代码如果想运行在3.x版下,需要使用转换程序进行转换。由于Python拥有超过20年的历史积累,当前绝大部分Python代码都是基于2.x ,所以下面即将介绍的Django也是基于2.xPython之上构建的。 (二)PythonWeb开发框架
随着互联网的发展,对于Web程序的开发已不仅仅局限于使用ASP.NETJSP或者PHP等传统开发技术,这类开发技术由于开发周期长,经常需要做重复性的工作,已经不适合快速的Web系统开发。而以Ruby语言构建的全新的Web开发框架Ruby On Rails,Web应用程序开发提供了极其便捷的途径,近年来的迅速兴起成为了Web开发社区的焦点[5]。这个框架的最大优点之一就是可以对Web系统进行快速的开发,避免了应用传统技术时需要反复编写重复代码的问题,而极大程度上减少了Web系统项目的代码量,提高了开发效率。由于Ruby On Rails是构建在Ruby之上的,自然也就使Python社区的开发者有些沮丧。但Python语言比Ruby语言有着更为悠久的历史,用户遍布全世界的各行各业。当4

Web框架也是多如牛毛,比较知名的有ZopePloneWeb.pyweb2py等。Django是最近几年才开发出来的基于PythonWeb框架,目前版本为1.6Django架作为PythonWeb框架长的新生力量,其很多方面借鉴了Ruby On Rails优点,虽然发展历史并不是很长,但是知名度非常高,是当前Python社区中最著名的Web开发框架。 (三)Django框架技术
Django是构建在纯Python语言之的Web开发框架,在国内刚开始掀起一股研究热潮。Python创始人Guido van Rossum曾经在接受采访时说:Django我个人最喜欢的一个,也是我长期选择的框架”[6]。从中不难看出Django框架在所有基于PythonWeb框架中的地位。从2005年起至今,经过不断的发展,Django框架不仅吸收了Ruby On Rails框架的有点,也弥补了一些Ruby On Rails框架的不足,从而拥有了自己的特色。Django以其简洁、快速的特性,吸引着越来越多国内开发者的关注和使用,已有不少开发者在CPyUG讨论组上公开了自己使用Django开发的Web应用及源代码[7]当前应用Django进行企业级系统开发的还比较少,但并不代表Django不适用于企业级开发。其同类技术Ruby On Rails已经被企业所接受,所以应用Django框架构建企业级系统将有更为广阔的发展空间。
1.MVT架构
Django应用开发遵循MVC模式[8],但是在Django中,大多数人更喜欢称之MVT架构。MModel模型,VView视图,TTemplate模板。图2-1示了Django的架构总览。在传统的MVC模式下,控制器C代表逻辑层,用于实现业务逻辑。而在Django中,views.py既负责实现业务逻辑,又负责用数据渲染模板文件,下面对模型,视图和模板做简单的介绍。

HTTP请求处理响应 URL 映射 (URL Mapping HTTP Handling

应用(Application

模型 视图 模板

Model View Template

对象关系映射 模板引擎 ORM Template Engine 数据库 文件系统 Database File System
5


2-1 Django架构总览图
模型即数据模型,是Django开发中最先需要建立的。每当使用Djangomanage.py startapp [应用名称]”命令新建一个应用时,Django都会自动生成用于存放数据模型定义的文件models.py。开发者可以在这个文件中利用Python的语法对数据表结构进行定义。定义完成后,Django可以通过syncdb命令将这些数据模型的定义映射到数据库中,不需要人工编写任何SQL语句去建立数据库和数据表。使用高度抽象的数据模型还有一个好处就是开发者可以不关心最终部署时使用何种数据库,开发时都可以使用基于文件的Sqlite3数据库。在部署时开发者只需要应用syncdb命令,将数据模型映射到最终部署的数据库即可。通过这种方式,可以节省开发者在搭建开发系统时的时间,加快开发效率。Django的数据模型类封装了很多常用数据库的操作,如查找,创建,更新,删除等。开发者不需要使用任何SQL代码去操作数据库,只需要调用已经封装好的模型类API即可。当然,Django也具有让开发者直接运行SQL代码的能力,以便处理一些特殊的需求。
视图在Django中充当控制器的角色,包含有实现业务逻辑的代码。每当一个新的应用被Django创建时,Django会自动建立用于存放业务逻辑代码的文件,views.py开发者可以通过在url.py文件中关联用户请求与逻辑处理代码实现对特定用户请求的处理。视图代码可以进行任何Python语言可做的操作,并且可以通过访问数据模型类来获取操作数据库中的数据的能力。依赖于Python丰富的类库,在逻辑代码中几乎可以做任何事情。
模板用于实现用户界面。Django的模板实际上是HTML文件内嵌了预定义的标记,用于实现一些复杂的逻辑操作,比如循环,比较等。这些标记基本上包括了所有常用的操作。Django还为开发者提供了自己定义模板标记的方法,用于更高级的模板开发工作。相对于模型与视图,模板的实现就比较自由,开发者可以自行在settings.py中指定模板文件的位置。业务逻辑代码就会自动根据设置去搜索指定路径中的模板文件,并对其渲染输出。
2.Form表单类
表单的开发是Web开发中最基本也是最重要的一部分,Django是实现了一套完整的Form表单类,高度抽象了几乎所有常用的表单域。开发者可以根据实际需求,派生属于自己的表单类并定义表单域。通过表单类可以完成HTML表单生成,服务器端用户输入验证以及发生输入错误时的表单重新显示等通用表单任务[9].对于HTML表单生成,Django的表单类提供了多种方法用于生成不同需求的HTML代码,Django对不同的表单域类提供了不同的窗口部件,并且开发者还可以根据实际需要更改默认提供给表单域类的窗口部件,从而生成满足需求的HTML代码。对于用户输入验证,Django首先会根据不同的表单域类自动生成用于验证数据有效性的代码,同时Django也为开发者提供了自定义验证数据有效性的方法,开发者可以根据实际需求,自定义函数对特定的表单数据进行验证。
3.基于类的通用视图
Web开发中常见的数据操作模式有新建,修改,删除等。通常传统的Web发技术都要反复编写代码去实现对不同数据表的增删改操作,一遍又一遍的重复已确定的模式[10]Django为了提高开发效率,避免开发时间浪费在重复的模式上,提出了通用视图的概念。在Django1.3版本之前,Django一直是使用基于函数的通用视图,由于函数不具有继承的特性,所以有时候在应付一些特殊需求时,就没有合适的办法可提供使用,一定程度上限制了通用视图的使用。Django6

1.3版本开始,是实现了基于类的通用视图,如ListView用于显示数据对象列表,DetailView用于显示一个数据对象的细节,也就是一个数据表中一行的所有字段内容,CreateView用于生成一个创建数据对象,UpdateView用于更新一个数据对象,DeleteView用于删除一个对象。通过通用视图,开发者可以直接生成操作指定数据模型的视图类。这样开发中进行数据的增删改操作时,开发者就可以避免编写大量的重复代码。而且使用基于类的通用视图还有一个好处就是很多方法都允许被重载,这样开发者就可以在遇到特殊需求时,通过对不同方法的重载来满足需求。
4.自动管理接口
自动管理接口是Django框架的一个主要的特点[11]。一个后台管理系统通常是一个用于对数据库中数据进行管理的界面。但是,相对于通用的数据库管理系统却有着很大的区别。数据库管理软件由于是通用软件,设计上完全是朝着通用的方式设计的,不可能对不同的数据字段提供有个性的操作界面,而且也不允许用户对其进行任何改变。系统管理员不可能使用数据库管理软件代替系统后台。传统的ASP.NETJ2EE以及当前流行的Ruby On Rails都不具有自动生成系统后台管理界面的功能。而Django却打破常规,根据用户的数据模型定义,自动生成的管理接口。通过自动生成的管理系统,可以实现用户的登录退出,权限验证,数据浏览,查询,添加,删除,编辑等功能。基本上,日常管理中常见的管理操作方法,都已经被自动生成的管理系统实现了。同时自动生成的管理系统还支持自定义的扩展。这个扩展包括功能的扩展和界面的扩展。自动生成的管理接口支持用户编写action对管理的数据对象进行特定的操作,研究人员可以借助管理接口已经实现的数据对象选择操作,对一个或者一组数据进行自定义的操作。且管理接口还支持研究人员用自己的模板重载管理接口默认的模板,用以提供符合个性需求的管理界面。
通过自动管理接口的应用,很多系统功能在设计上可以获得极大的简化,研究人员只需要设计好自己的ModelAdmin类即可实现一个具有强大的增加,删除,修改以及查询功能的系统后台。与同类技术产品相比,可以更为有效的提升开发效率,并且由于自动生成的管理接口已经达到了产品级的质量标准,应用它可以比研究人员自己编写复杂而重复的后台代码拥有更高的质量。 三、系统的设计与实现
系统设计时系统开发过程中核心的一项工程活动,其主要任务是提供一张详细的“设计图纸”来指导开发者完成系统的开发过程。系统实现是软件工程的一个阶段,是系统设计的继续,其主要任务就是一条一条代码地完成软件的开发过程,是实现软件从无到有的过程。
本章论述的是本系统各个功能模块的详细设计。在设计的时候,将整个系统细分为多个功能模块,从而来给系统的实现提供的设计方案。同时,本章还通过代码片段来分析和论述了一部分重点功能的实现方法。 (一)系统总体设计
图书内容分享管理系统主要承担图书信息的管理工作,其主要工作包括对图书信息的发布、用户验证以及对书籍的评论管理。在系统设计时,首先讨论了各个功能的数据模型,随后在数据模型的基础上对功能的实现进行了详细的设计,最后讨论了数据库实现及Web设计[12]
1.内容管理相关数据模型设计
根据最初对系统设计的需求,下面将讨论图书内容管理以及评论管理数据模
7


型。
图书内容主要包括以下内容:标题、作者、发布时间、图书内容、分类、评论。考虑到实际使用中,管理员可能会对某些评论进行限制,所以每条图书信息还应包括评论允许。同时,用户可能希望为图书评级,所以每一条图书信息还应允许用户进行评级。根据以上分析,定义图书内容的数据模型部分代码如下[13]
class BookPost(Displayable, Ownable, RichText, AdminThumbMixin: title = models.CharField(_("标题", max_length=500 categories = models.ManyToManyField("BookCategory", verbose_name=_("分类",blank=True, related_name="bookposts" allow_comments = models.BooleanField(verbose_name=_("允许评论",default=True comments = CommentsField(verbose_name=_("评论" rating = RatingField(verbose_name=_("评级" class TimeStamped(models.Model: class Meta: abstract = True created = models.DateTimeField(null=True, editable=False class ThreadedComment(Comment: by_author = models.BooleanField(_("By the book author", default=False replied_to = models.ForeignKey("self", null=True, editable=False,related_name="comments" rating = RatingField(verbose_name=_(" 评级" objects = CommentManager( class Meta: verbose_name = _("评论" verbose_name_plural = _("评论" class Rating(models.Model: value = models.IntegerField(_("Value" 借助于Django优雅的设计模式以及Python语言优秀的语法设计,图书内容管理的数据模型的定义非常简洁明了,即使没有任何编程基础的人也可以从其定义中大概读懂每一行的意思。上面的数据模型首先定义了图书内容的标题,长度最大为500个字节,类型使用的是CharField类型。这个类型最后会被Django映射到目标的数据库系统中,根据数据库系统的不同,目标字段的类型可能会有少许差别,对于本系统使用的MySQL服务器,该字段最终会被映射成VARCHAR数据表字段。Comments用于存放评论,使用的是CommentField字段。这个字段最终会被映射成为数据表中的longtext字段。之所以使用longtext字段,是因为评论的形式多样,如果单纯的使用可变长字符串定义,则很可能会在实际使用中发生字段长度不够的问题。Crated是日期型字段,这里使用DateTime字段。可以看出,Django的数据模型定义语法完全遵循Python的语法,所以可以允许调用Python的代码。replied_to字段用于保存用户对图书的评论,这里使用了 null = True, blank = True,将该字段设置为可以为空,允许用户在不需要的时候可以不输入任何信息。
8


与同类产品所用技术相比,Django在数据模型定义方面具有极高的优越性,主要体现简洁性、灵活性与扩展性等方面。企业级B/S应用系统多采用ASP.NET或者Java开发。ASP.NET没有提供定义数据模型的功能,虽然借助强大的VisualStudio可以直接操作数据库,定义数据库表格。但是一旦想要使用其他的开源数据库,MySQL等,就必须重新编写数据访问层代码以适应新的目标数据库,而且研究人员还必须要编写大量SQL代码去手工创建数据库和数据表,常的费时费力。由于没有数据模型的机制,系统的数据访问层就会被固定在单一数据库上,所以开发时研究人员必须要将开发环境的数据库配置成和部署环境一样的数据库,以便测试各种功能,一旦数据库改变,就必须重新针对新的目标数据库重新编写合适的SQL代码,非常不灵活。而Django不存在这种问题。使用Django只需要在setting.py文件中设置好目标数据库的类型,SQLiteMySQLPostgreSQL等,以后只需要更改一行代码,就可以实现目标数据库的改变。在本系统的实际开发中,就利用了这个特性,开发环境被配置成为使用SQLite据库,由于SQLite是文件型数据库且Python中自带了SQLite数据库,这样就减轻了配置开发环境的负担,换句话说如果没有特殊的需求,开发环境中可以不安装热河数据库软件。本系统实际部署时使用的是MySQL数据库,在部署时只需要利用Django的一个管理命令syncdb就可以将所有数据模型的定义转化为合适于目标数据库的SQL代码,并应用与目标数据库。整个过程无需研究人员人为干预,充分体现了Django数据模型的简洁与灵活。由于Django的数据模型定义是完全基于Python代码的,一个数据模型定义就是一段Python代码,如果想要对数据模型进行扩展,或者对数据进行其他的逻辑操作,完全可以在Django数据模型类中调用已编写好的Python代码。这样在进行系统开发时,研究人员可以随意对数据模型的功能进行需要的扩展,为数据模型增加新的逻辑操作。
2.数据库实现
数据库实现首先要根据上一节介绍的数据模型,通过在Django框架下Python语言建立Model,与此同时,MySQLdb是一个PythonDB API2.0接口,提供了一个python连接MySQL数据库的模块。Django有着一个设计良好的ORM这种方式使得其可以有效的屏蔽底层数据库的不同。利用Django的应用目录中setting.py文件实现配置数据库。如:
DATABASES = {
"default": { "ENGINE": "django.db.backends.mysql", "NAME": "bookmis", "USER": "root", "PASSWORD": "python", "HOST": "localhost", "PORT": "3306", } } 3.Web设计
Web设计主要针对访问页面和管理界面,其中访问页面是以基本模板为基础,HTML语言编辑出一个显示图书信息的页面,管理界面则借助Django管理模板进行设计。
3.1 Django请求响应流程
9



3-1 Django请求响应流程图

如图3-1所示,当服务器收到浏览器发出的一个HTTP请求以后,服务器特定的ModPythonHandler产生HttpRequset响应并传递给下一个Resquest Middleware组件并处理。然后调用可以调用的Request或者View Middleware这些类型的中间件通常是用来增强HttpRequest对象,是用来对一些特别类型的Request做特别处理。只要其中任何一个返回HttpResponse,系统就跳过处理View。同时也要考虑到异常错误,异常处理中间件(Exception Middleware)便是解决异常错误的中间件。如果一个视图函数抛出异常,控制器会传递异常信息Exception Middleware处理。只有这个中间件返回一个HttpResponse,才处理这个Exception否则这个Exception将会再次抛出。Django框架仍然包含缺省的视图来生成友好的404/500 Response。最后,Response Middleware 发送HttpResponse给浏览器之前的后处理或者清除请求用到的相关资源。 3.2 URL设计
Django项目中,URL设计是不可回避的内容,它定义在配置脚本文件中ROOT_URLCONF属性值。在Django服务器启动后,系统将此URL结果与配置文件URL设计进行匹配,继而调用相应的方法。当收到一个HttpResquestDjango首先试图把URL当普通的Python字符串和URL配置模式匹配,而不是Unicode10

字符串,且不包括“GET”方法参数或“POST”方法参数或者域名,它也不包括URL开头的第一个斜线。同时,在解析URL配置是请求方法,如“POST”方法和GET”方法不会予以考虑,也就是,对于同一个URL的所有请求方法将被引导到同一方法,根据请求方法处理分支是视图View所要做的工作。 3.3 基本模板
Django框架提供了一种模板语言,该语言可以被快速呈现且易于使用,Django模板代码和普通的HTML代码有很大的相似点,Django模板代码只是利用{{variables}}{{tags}}特定的模板标记嵌入创建的模板页面,继而添加页面逻辑处理。{{variables}}{{tags}}这类变量会使用值替换进行计算,以此实现基本的控制逻辑。模板可以使用HTMLXMLCSB和纯文本来生成。
Django框架使用模板继承来实现,为页面创建一个统一的外表,而用标记块定义基础文档来实现继承,不用替换每个模板的内容。当DjangoViewTemplate准备妥当,需要在setting.pyTEMPLATE_DIRS域设置模板绝对路径。基础模板base.html,定义站点的主要外观,格式形如:
endif %}> content="text/html;charset=utf-8"> {%block title%}{%endblock%} —含有头文件--> {%block header%} {%include 'header.html'%} {%endblock%} —数据块--> {%block middle%} {%endblock%} —父模板中的内容--> {%block myContent%} {%endblock%} —底部文件--> {%block end%} {%include 'end.html'%} {%endblock%} {%block test%} {%endblock%} 子模板child.html的内容,不需要定义base.html所有的代码块,只需对子模块所需的代码进行定义。
{%extends "base.html"%}
11


将模板名称加载到TEMPLATE_DIRS> {%block title%} {{block.super}}新标题> {%endblock%} {%block middle%} 处理模块-> {{block.super}}

继承模板的内容

{%endblock%} {%block myContent%} 处理模块-> {{block.super}}
{%endblock%} 通过以上基础模板的设置,填入适当的模板代码,与数据库中相应的数据交互,便可建立一个简单的网页页面。3-2便是以模板为基础建立的图书内容管理网页。

3-2 图书内容管理网站页面
3.4 Django管理
Django的管理界面对于编辑管理页面既省时又好用。其中对于数据编辑工作来说,该管理界面发挥了事半功倍的功效,特别是那些没有任何数据库编程技术背景的用户来录入数据。这样的管理界面可以查验我们先前建立的部分模型的同时,也可以查验管理者录入的数据。图3-3便是Django管理的登录界面。12


3-3 Django管理的登录界面
INSTALLED_APPSdjango.contrib.admin”、django.contrib.sessionsdjango.contrib.authdjango.contrib.contenttypes也需要在bookmis文件夹内的urls.py中添加诸如一下语句:

urlpatterns = patterns("book.views",
(r'^$', 'method_splitter',{'GET': somepage_get, 'POST':
somepage_post}, 这样的urls.pyView中“GET”和“POST”方法分离,GET”和“POST两个方法都是浏览器发送数据到服务器端,两者的区别主要在于“GET”方法更强调操作的安全性;POST”方法是需要进行数据交互,此时用户要对数据变更的结果负责。
Django在建立Models的同时,也为数据建立了一套审核机制。为避免误删除关联对象中的数据项,Django会提示操作用户。如图3-4当要删除现有对象“数学与应用数学”时,管理界面要求确认删除动作,确认删除页面显示出对象,在一定程度上,可以避免用户的误删除。
3-4 Django确认删除对象
结论
通过研发基于Django的图书内容分享系统,利用Django框架的模板系统设计出了网站页面和管理页面,便于网页系统页面的扩展。Django框架设计出的页面可快速发布图书信息,能够完成图书信息的发布、增加图书、删除图书、评论图书等功能。
通过建设整个系统,完成了基于模板的网站页面和管理页面,能够快速的发布图书信息,管理图书信息及用户信息,基本达到预期的目的。但是,系统本身仍然存在不足,未来软件更新维护主要可以在数据模型的可扩展性和视图的简单13

性进行扩展,使用户可以更简单、轻易的使用系统。Django其自身的优势十分明显,简单易维护,易适应需求的变化,可以快速发布图书信息,同时系统也具有高效的安全通信机制。
不论如何DjangoWeb开发领域的发展才刚刚开始,未来随着Django框架进一步成熟,一定会有更多新的特性被加入其中,而Django也必将在Web开发领域占有越来越多的市场。

参考文献:

[1] 吴振新.基于开源Web内容管理系统的研究与比较[J].现代图书情报技术, 2007(04. [2]Alex Martelli.Python in a Nutshell, 2nd Edition[M].Sebastopol:O 'Reilly,2006.3. [3]高昂.Python近况全接触[J].程序员,2009,4. 4]Mark Lutz.Learning Python, third edition[M].Sebastopol:OReilly,2007. [5]周洁.基于Ruby On Rails框架的体育门户网站的研究[J].华东交通大学学报,2008,256. [6]ITEYE.python创始人访谈录关于DjangoRuby[EB/OL].http://www.iteye.com/news/2972, 2008-7-22. [7]高昂.Django及国内Python社区进展[J].程序员,2009,9. [8]刘班.基于Django快速开发Web应用[J].电脑知识与技术,2009,57. [9] Jeff Forcier,Paul Bissex,Wesley Chun. Python Web Development with Django[M]. United States: Addison-Wesley Professional,2008. [10]DjangoProject.Django documentation class-based generic views[EB/OL].http://docs.djangoproject.com/en/1.6/topics/class-based-views/,2013-12-11. [11] David Beazley and Brian K. Jones. Python Cookbook, Third Edition [M]. United States: O’Reilly Media,2013. [12] 马建玲.开放源代码的内容管理系统Drupal[J].现代情报,2007(02. [13] Magnus Lie Hetland.Beginning Python: From Novice to Professional[M].New York:Apress,2008,1.


本论文是在杨艳梅老师的悉心指导下完成的。杨老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与处世的道理,这将会使我终身受益。在我毕业论文撰写的过程中,杨老师给予了我耐心、细致和全面的帮助。谨向杨老师表示崇高的敬意和衷心的感谢。
最后感谢我的父母含辛茹苦地抚养我、教导我。

14


本文来源:https://www.2haoxitong.net/k/doc/8d32de4ade80d4d8d15a4faf.html

《基于django的图书分享系统的设计与实现-.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关推荐