【《基于MySQL和Web的信息存储数据库设计》12000字(论文)】_第1页
【《基于MySQL和Web的信息存储数据库设计》12000字(论文)】_第2页
【《基于MySQL和Web的信息存储数据库设计》12000字(论文)】_第3页
【《基于MySQL和Web的信息存储数据库设计》12000字(论文)】_第4页
【《基于MySQL和Web的信息存储数据库设计》12000字(论文)】_第5页
已阅读5页,还剩24页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-PAGE1- -PAGE1-基于MySQL和Web的信息存储数据库设计摘要本论文主要内容是基于MySQL和Web的信息存储数据库设计。采用B/S结构,在互联网中利用浏览器作为用户输入接口,以Web查询接口的方式访问数据库资源,实现对图片和音频文件本身及其相关信息的存储管理和搜索。该信息存储数据库,是一个相对简单的Web应用系统,将Web技术[1]与数据库技术[2]有效结合。用户在浏览器端的交互界面输入信息,浏览器通过Web服务器端来访问物理数据库,利用后端业务逻辑实现相关操作。用户向系统提交的信息以及系统返回给用户的信息都是以清晰友好的网页形式显示[3],能够便捷高效地对数据库中的图片和音频文件本身及其相关信息进行存储、浏览、修改、删除和检索,从而实现对多媒体文件信息的有效管理和利用。本文参考了当前数据库和Web的相关技术,设计并实现了针对个人日常生活中有意义的多媒体文件的信息存储数据库,称其为音像资源管理系统。该系统的开发工作大致可分为三个部分:Web前端、Web后端以及数据库的设计,重点在于Web后端的业务逻辑设计以及物理数据库的设计,运用基于Python3.8.7语言的Django框架、PyCharmCommunityEdition2020工具以及NavicatforMySQL工具进行设计和实现。该系统的主要功能是:用户登录注册功能,信息上传下载功能,信息浏览修改功能,信息删除功能,信息检索功能等。按照功能将系统分为用户模块、图片子系统模块和音频子系统模块。子系统的信息管理子模块为所有图片和音频文件添加了名称、类型、标签等描述性文字,以便能够将非结构化信息的图片和音频文件在系统中实时地进行归档和整理。搜索子模块也可以通过这些描述性文字进行基于关键字的搜索,从而有效提高图片和音频信息的检索效率。关键词:MySQL;B/S;图片音频;存储搜索1引言1.1研究背景和意义在信息数据化时代,每天一打开手机,各种信息扑面而来。直观集成的多媒体信息更是在各大媒体平台进行广泛传播,强有力地渗入到了我们的学习、生活、娱乐方式中。数据规模迅速扩大,数据结构的多样性逐渐增长。对于日常生活中“爆炸”的信息和资源,人们需要一个信息存储数据库对这些数据中有意义的信息和资源进行统一存储,有效管理,方便高效的检索和利用这些资源。1.2国内外研究现状图片和音频作为常见的多媒体信息资源(载体),其本身是非结构化数据,能够传达各式各样的信息。目前,数据管理技术不仅能对文本信息、符号信息等结构化数据进行存储,更能适应当前数据发展要求,对图片、音频、影像等复杂的数据资料进行有效地存储。非结构化数据在物理数据库中的存储方式主要有两种:数据库直接存储、文件系统与数据库联合存储。当前,一些关系型数据库如MySQL,二进制文件可以使用二进制流的方式在其中直接存储,如BLOB(二进制大对象)字段类型,不需要借助文件系统,就可以直接访问文件,不过文件大小有一定限制。因为没有关系到其他应用系统,所以便于管理与维护[4]。而将附带的十分复杂的结构化信息与文件本身分离式存储,有利于优化配置存储资源。而对图像、音频等多媒体信息的检索方式一般分为基于文字和基于内容这两种方式。有两种解读方式,第一种:文字指的是图像和音频所携带的客观信息即底层的非抽象特征数据,如名称、制作时间、存储大小、多媒体类型等,内容指的是图像和语音所携带的主观信息即抽象的特征数据,如语义内容,每个人的理解各有不同;第二种:文字指的是除图像和音频文件本身外所有以文字所描述的属性数据,称为关键字检索,内容指的是图像和音频文件本身的原始信息,如以图搜图,通过底层特征相似性匹配得到结果。目前国内外对以图搜图这类基于内容的检索技术更加关注。Web数据库将资源共享数据和资源共享两种技术相结合,利用万维网实现方便廉价的资源共享。数据信息是资源的主体,因而Web数据库技术自然而然成了互联网的核心技术。目前数据库应用的发展有两个趋势:一是扩大数据的作用范围,使更多的人能从中得益;二是扩充数据的类型,除了数值字符等格式化数据以外,还包括图形、图像、长文本等非格式化数据,而Web数据库正顺应了这一发展趋势[5]。1.3研究内容 本文针对基于MySQL和Web的信息存储数据库即音像资源管理系统的开发给出了一种设计方案。本文的主要工作集中在Web后端的业务逻辑设计以及数据库设计,具体如下:(1)通过分析数据库存储信息的功能要求,明确整个系统在设计与应用中所需要完成的各种业务功能,划分整个系统设计与开发的各种功能模块。(2)查阅并学习数据库技术和Web技术,明确了实现信息存储数据库的系统开发框架和实施方案,对开发工作的进度计划进行了合理的安排。(3)给出了实现信息存储数据库的系统概要设计,将系统的总体架构按照功能进行了模块划分,按照开发工作进行了层次化划分,设计了系统功能模块的业务流程。(4)给出了较为详细的分层开发设计:在数据存储,设计了层MySQL表结构、数据字段,以完成数据库的创建;在数据访问层层,设计了映射到MySQL数据库中每个表的数据访问对象;在静态模型层,为每个功能设计输出静态数据的模型文件;在业务逻辑层,为每个功能模块设计业务逻辑,实现系统的具体业务功能。(5)对系统各功能模块进行相应的正确和错误测试,并对系统进行一步步地调整优化。1.4论文组织结构 本论文共有六个部分,各部分具体内容如下: (1)引文。第一部分介绍了本论文的研究背景、国内外研究现状、研究的主要内容以及整篇论文的组织结构。 (2)数据库系统概述。第二部分介绍了实现信息存储数据库系统的开发方法,包括B/S结构,Django框架,MySQL数据库技术等。 (3)系统设计分析。第三部分给出了系统需求分析、系统的总体架构、按照功能的模块划分、层次化的开发方式。 (4)系统设计。第四部分介绍了数据库的设计以及根据系统开发的层次结构对各系统模块的设计,在业务逻辑层面,对各个模块的各种功能给出了简要介绍和关键代码。 (5)系统功能测试。第五部分是运用模块测试的方法,对系统各功能模块进行相应的正确和错误测试,给出相应的测试结果。 (6)结论。对论文的主要工作和系统的优劣进行总结。

2数据库系统概述2.1B/S结构B/S结构,即浏览器和服务器的架构模式,是一种软件应用程序开发的模式,在网络出现后开始流行,并随着互联网和万维网的普及而越来越流行。B/S架构在传统的C/S架构基础上有一定改进。在新型的B/S系统结构下,用户只需要安装一种客户端软件就可以获得许多应用软件的功能,而浏览器就是一个可以支持很多应用程序的客户端软件。用户通过浏览器查看和使用不同服务器提供的服务,访问不同的信息数据库系统,服务器端处理浏览器请求的业务逻辑处理,在浏览器中显示系统处理的结果和数据库返回的数据。很少有处理业务逻辑的程序运行在浏览器这端,在多数情况下,浏览器只需要负责显示数据和提供交互式用户界面,而系统的大部分业务逻辑处理发生在服务器端。这种开发模式在大大降低了客户端的负载,以及与后续维护、系统升级和其他操作相关的任务和成本,提高各种各样信息资源的共享能力,降低由于不便操作带来的总体工作量[6]。2.2Django框架Django是一种基于Python的Web开发框架。Python有很多Web开发框架,如Tornado、Flask、Cubes等,Django应该是其中最出名的一个。基于Python的大部分Web框架一般是基于图2.4所示的框架。图2-图2-SEQ图2-\*ARABIC4一般Web框架数据库与模板耦合业务处理逻辑路由系统WSGI浏览器HTTPWeb框架HTML、CSS、JS等静态文件Static数据库ORMDjango使用了全部的WSGI功能,它具有非常完善的功能和内置组件,丰富的模板语言,以及方便开发者查询使用的在线文档。自带Model层ORM(Object-RelationMapping)数据库模型组件,一种可以使Model层中的类模型映射成物理数据库表的内置组件,即使不学习数据库中的SQL语句也可以对数据库进行增删改查。Web开发领域最著名的MVC模式是由TrygveTeenskaug在1978年提出的[15]。所谓的MVC就是把Web应用被分为3个部分:M是Model,指业务模型;V是View,指视图,C则是Controller,指控制器。Model(模型层)负责将业务对象映射到物理数据库表中的关系,是数据库和网络框架的交互层;View(视图层)负责与用户的界面进行交互,将数据显示给用户;Controller(控制层)是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图(View)显示。同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。而DjangoMTV对传统的MVC框架进行改进。在Django中,框架自行处理控制器接收用户输入的部分,将视图层(View)分离成两部分即显示静态数据的模板层(Template)和负责业务逻辑处理动态数据的视图层(View)。DjangoMTV模式具有内置ORM组件,在定义好数据模型之后,通过映射到基础数据库中的Python对象,来创建、检索、更新以及删除数据库数据。这样我们修改数据就不用通过SQL语句了,直接用Python去修改对象的属性即可。DjangoMTV框架如图2-5所示。图2-图2-SEQ图2-\*ARABIC5DjangoMTV组织框架图返回HTTPStaticTemplates浏览器WSGIUrlsViews模板语言HTTP请求数据库ModelsORM2.3MySQL数据库数据库技术目前是计算机处理与存储数据的最有效、最成功的技术。通过数据库技术,可以对数据进行有效的组织、存储、查询和处理[10]。常见的数据库模型可分为:关系型数据库和非关系型数据库,目前,在多数传统行业和中小型企业,仍以关系型数据库为主。关系数据库的应用需要RDBMS(关系型数据库管理系统),该系统使用SQL(结构化查询语言)对数据库进行操作。SQL是最广泛用于访问和操作数据库的标准化计算机语言。SQL使用各种命令来形成一个语句。它是一种非过程和非面向对象的编程语言。它可以嵌套,具有很大的灵活性和强大的功能。SQL可以直接在RDBMS使用,也可以集成到其他编程语言中。系统设计和开发的实质是对数据的操作,网页负责动态显示处理后的数据。在Web应用程序中,大多数开发人员会首先考虑MySQL,因为MySQL是一个开源软件,它不需要支付额外的费用来降低开发成本。它是RDBMS最具代表性和十分普及的应用程序之一。MySQL使用标准软件,支持多种系统,还支持多种开发语言。MySQL是一个真正的多用户多线程数据库服务器[9]。与Django自己的sqlite3相比,MySQL有很大的优势。MySQL支持多线程,能够充分利用CPU的资源。在多用户同时访问站点的情况下,sqlite3就无法满足这一需求。同样,如果开发一个Web应用程序,不同的用户通过网络访问数据库,sqlite3也无法胜任。MySQL支持多种多系统版本并提供很多编程语言的API,如Python、Java、PHP、C++、C等。

3系统设计分析3.1需求分析本论文所要设计的信息存储数据库,需要实现图片和音频信息的存储,可以通过关键词检索数据库里的数据信息。通过数据库技术和Web技术结合,设计一个Web数据库系统,即音像资源管理系统,提供可视化友好界面,能够方便浏览和展示图片和音频自身及其相关信息。并将系统定位于个人日常生活中图片和音频资源的统一存储和管理,有利于高效搜索和利用资源。3.1.1功能性需求分析(1)存储图片和音频文件以及相关描述信息,确保内容的正确性、有效性;(2)有效组织图片和音频文件,将非结构化的图像和音频数据本身转换为可与其他结构化数据相连接、有效管理和快速检索的数据;(3)提供图片和音频文件的管理功能,能够对文件类别和相关描述性内容信息进行编辑修改、增加删除操作;(4)提供图片和音频文件的检索功能,通过多条件的查询搜索准确高效将所需的文件数据信息返回给系统用户;(5)提供用户登录和注册界面,通过注册功能注册用户,通过登录认证后即可使用该音像资源管理系统,保证个人图片和音频的安全保密性。3.1.2基本流程分析 输入网址打开首页,用户点击注册,输入相关信息提交表单,成功注册后点击登录,登录成功进入系统首页,可以管理图片和音频文件的类别,也可以点击上传按钮,上传图片或者音频文件并且选择其类别,填写其描述信息如名称、标签、内容介绍等,经过简单检查,上传表单成功后所有信息就存储在相应的数据表中。还可通过左侧导航界面或者相关按钮进入图片子系统或者音频子系统,在子系统中可以分页浏览全部或者特定类别已存在的图片或者音频及其相关信息如名称、类别、标签、内容介绍等,每条信息提供四个按钮:详情、下载、编辑、删除可进行相应操作。点击详情按钮即可以查看所选内容的详细信息;点击下载按钮即可下载相应文件;点击编辑即可显示原来存储的数据信息,在原来的基础上对相关内容进行修改;点击删除即可删除已存储在数据库中的数据内容。在搜索框中输入关键字,可搜索全部数据也可在特定类别的范围内进行搜索,查询数据库中的数据,找到含有关键字的数据信息分页展示在网页中。对个人的图片和音频信息进行管理、检索之后,可点击退出按钮,退出系统。3.1.3数据词典 经过分析,所开发的音像资源管理系统至少应有5个数据表,分别是:(1)用户信息数据:用户的基本数据,数据项包含用户编号、用户名、登录密码、密码干扰值、邮箱、注册时间。(2)图片信息数据:图片文件本身及用户输入的信息,数据项包含图片编号、图片本身、图片存储路径、图片名称、自定义标签、内容介绍、上传图片的用户编号、图片类别编号、上传时间、修改时间、下载次数以及检索计数等。(3)音频信息数据:音频文件本身及用户输入的信息,数据项包含有音频编号、音频本身、音频存储路径、音频名称、自定义标签、内容介绍、上传音频的用户编号、音频类别编号、上传时间、修改时间、下载次数以及检索计数等。(4)图片类别信息数据:用户自定义的图片类别信息,数据项包含有图片类别编号、用户编号、图片类别名称、禁用启动状态、创建时间、修改时间。(5)音频类别信息数据:用户自定义的音频类别信息,数据项包含有音频类别编号、用户编号、音频类别名称、禁用启动状态、创建时间、修改时间。3.2系统总体架构设计在分析了系统需求后,以功能模块和开发层次的形式设计了整体系统架构。按照功能将系统分为用户模块、图片子系统模块、音频子系统模块。子系统又可以分为:信息管理子模块以及信息检索子模块。按照Django架构的开发层次将系统架构可分为:路由设计(URL),模板层(Template),视图层(View),模型层(Model),MySQL数据库设计。3.3系统功能模块结构将系统的功能进行模块化划分,不仅实现了功能模块的重复利用,提高了程序代码的复用性,也使得功能模块彼此独立、系统结构清晰,方便之后系统功能的拓展和维护[12][13]。图3-1为音像资源管理系统模块划分,主要有三个模块:用户模块,图片子系统模块和音频子系统模块。信息管理信息检索信息管理信息检索登录功能注册功能信息管理信息检索图片子系统模块音频子系统模块音像资源管理系统用户模块图3-SEQ图3-\*ARABIC1音像资源管理系统模块划分下面对各模块功能进行详细介绍:(1)用户模块重要的功能是实现用户的注册、登录、信息显示与退出,注册时负责将用户信息存入相应的数据库表中。登陆时负责将用户填写的信息与数据库中的信息进行匹配判断,将登录成功的用户信息存入session会话,并通过中间件防止用户不经过登录就进入系统。信息显示负责将登录成功的用户信息显示在系统中。退出时负责将用户信息从session中移除,回到登录界面。(2)图片子系统模块和音频子系统模块根据多媒体文件类型和格式的不同,将系统分为图片子系统和音频子系统,分别对图片和音频进行上传下载、信息编辑、分页浏览、查看详细信息、信息修改、信息删除、搜索等操作,由于操作过多,将子系统模块分为两个子模块:信息管理子模块、信息检索子模块。图3-2是各子模块的功能划分。导航查找功能关键字搜索功能导航查找功能关键字搜索功能信息管理子模块信息检索子模块子系统模块分页浏览功能信息编辑功能信息删除功能上传下载功能图3-SEQ图3-\*ARABIC2各子模块的功能划分信息管理子模块提供图片信息管理的操作,主要负责获取用户请求中的图片或音频信息,对信息进行处理,将信息写入数据库中,将图片或音频文件保存到服务器上,是子系统的核心模块,功能较为丰富、复杂。子系统模块的具体业务功能有上传下载、分页浏览、信息编辑、信息删除等。用户通过上传存储功能将图片或音频源文件上传到服务器并存储到数据库中,生成图片编号和上传时间等信息;通过图片分页游览功能提供友好的视图界面,用户能够查看图片或播放音频,以及查看其详细信息;通过信息编辑功能进行图片或音频相关信息的编辑,填写或修改对于图片或音频文件的描述信息有利于之后的信息检索;通过信息删除功能,用户可清除没有意义的文件资源。信息检索子模块主要负责根据信息检索数据。用户可以通过导航浏览查找到自己想要的资源文件或在搜索框输入关键字进行检索,也可以选择相关范围,通过输入多组关键字快速检索信息,选择排列顺序,从而提高数据的查找效率和利用率。3.4系统开发层次音像资源管理系统基于Django框架按照开发层次将系统架构分为:路由设计(URL),模板层(Template),视图层(View),模型层(Model),MySQL数据库设计。(1)路由设计(URL) URL应该易于理解、认识和记忆。越短越好。不应该有太多的参数,目录层次应该保持在最低限度,文件和目录名称应该是描述性的,并且应该尽可能使用静态URL。(2)模板层(Template)模板代表表现层,它负责处理与表现相关的决定例如:如何在页面或其他类型文档中进行显示。它需要视图View传递过来的变量(Variable)或内容对象(Contextobject)才能被渲染成一个完整的页面。这样做的好处是实现了样式与业务逻辑的分离,便于前端和后端Web开发人员各自完成自己的开发工作。(3)视图层(View)视图代表业务逻辑层,这一层包含存取模型及调取恰当模板的相关逻辑。可以把它看作模型与模板之间的桥梁。简而言之,它是一个Python函数或方法,用来接受网络请求的处理并返回响应信息。通常和URL路由一起工作的。服务器在收到用户通过浏览器发来的请求后,会根据urls.py里的关系条目,去视图View里查找到与请求对应的处理方法,从而返回给客户端http页面数据。(4)模型层(Model)模型代表数据存取层,是系统项目中数据信息的来源,与数据库进行交互,包含了存储数据所需的字段和行为。模型与数据库的关系是ORM(对象-关系-映射)关系。每一个模型类映射对应的数据表,对模型的操作将直接反映到底层的数据表,即每一个类代表了一个表,每创建一个类的实例就相当于在表中增加了一行数据,每一个实例的属性代表了每一行数据的一列。Model一般拥有最多的处理任务,负责处理与数据相关的所有事务如:如何存取数据、如何验证数据有效性、数据之间的关系等,为多个视图提供数据。(5)数据库设计一个好的数据库设计不仅能满足数据库用户的需求,而且对应用程序也有非常重要的影响。然而,数据库设计是一个复杂的过程,设计一个好的数据库并不是一件容易的事情。对于小型应用,了解需求的数据库设计者可以直接指定要创建的关系,关系的属性和这些关系的约束。但是现实世界的应用往往是复杂的,通常不可能由一个人了解一个应用的所有数据要求并立即指定最终的数据库设计。因此,有必要遵循一种数据库设计方法。数据库设计通常包括以下阶段:完整的刻画未来数据库用户的数据需求;选择数据模型,并采用所选数据模型的概念将需求转化为数据库的概念模式;将抽象数据模型转化为数据库实现。

4系统设计4.1数据库设计Web应用系统开发的基础是数据库,所以数据库表的设计非常关键,MySQL数据库负责本存储系统的全部信息,比如用户信息、图片信息、音频信息等。良好的数据库设计既是实现功能的基础,也是高效开发的必要条件[14]。(1)MySQL数据库E-R模型概念结构设计是将现实世界中用户的需求抽象为计算机数据世界中的信息结构即概念模型的过程,实体-关系(E-R)数据模型是在数据库最经常使用的概念模型。因为它能够将现实世界的含义和交互映射到概念模式上,使得技术人员和非技术人员都能够用统一的语言去描述用户的数据需求。本系统的概念结构E-R图如下图4-1所示。图4-图4-SEQ图4-\*ARABIC1E-R图时间管理操作操作用户UID账户密码时间管理IDID图片音频PIDAID类别内容容名称类别内容容名称邮箱注册时间······(2)MySQL数据表结构E-R模型是现实世界的含义和交互在概念模型上的体现,而关系模式是数据库中全体数据的逻辑结构和特征的描述。逻辑结构设计是将上一个环节设计好的基本E-R图转换为MySQL支持的关系模型的逻辑结构——一组关系模式的集合。创建基表:用户表、图片表、音频表。得到初步数据模式之后还应该以规范化理论作为指导适当进行修改优化。1)用户表(users)如表4-1所示,用户表存储注册用户信息,uid为表主键,用户注册成功自动生成的用户编号,数据库自动为主键建立索引,name为用户注册时自定义的用户名,password_hash是MD5加密后的密码,在数据库中不显示用户所输入的密码,提高系统安全性,password_salt是密码干扰值,是一组随机数字序列。add_time为用户注册成功将用户信息保存到数据库的时间。email字段具有不可重复(UNIQUE)属性,表示email不可以重复,注册时若email已存在,则不能成功注册。表4-SEQ表4-\*ARABIC1用户表字段名称类型长度是否唯一是否索引是否主键字段说明uidint11YYY用户编号namevarchar100Y用户名password_hashvarchar100用户密码password_saltvarchar50密码干扰值add_timedatetime6注册时间emailvarchar254Y邮箱2)图片表(pics)如表4-2所示,图片表存储图片信息,pid为表主键,存储用户上传图片时系统自动生成的编号,数据库自动为主键建立索引,title存储用户起的图片名称,tag1,tag2以及content是为方便检索图片信息让用户填写的描述信息,包括简短标签和长文本内容简介。file的类型是BLOB,可以将图片文件本身直接存入数据库,path是图片在后台服务器上的存放路径URL(统一资源定位符),以便全段界面获取图片文件资源。uid存储上传该图片的用户编号,tid存储该图片的类别编号,created_at和updated_at分别存储上传时间和更新时间,count存储图片下载次数,scount存储图片检索访问次数。表4-2图片表字段名称类型长度是否唯一外键是否索引是否主键字段说明pidint11YYY图片编号titlevarchar100图片名称tag1varchar100标签1tag2varchar100标签2contentlongtext内容简介fileblobY文件本身pathvarchar100文件路径uidint11users.uidY用户编号tidint11pic_type.idY类别编号created_atdatetime6上传时间updated_atdatetime6更新时间countint11下载次数scountint11检索次数3)音频表(audio)如表4-3所示,音频表存储图片信息。其字段说明与图片表说明一致。表4-3音频表字段名称类型长度是否唯一外键是否索引是否主键字段说明aidint11YYY音频编号titlevarchar100音频名称tag1varchar100标签1tag2varchar100标签2contentlongtext内容简介fileblobY文件本身pathvarchar100文件路径uidint11user.uidY用户编号tidint11aud_type.idY类别编号created_atdatetime6上传时间updated_atdatetime6修改时间countint11下载次数scountint11检索次数4.2用户模块用户信息数据存储于用户表,与数据表映射的Model类为users。4.2.1注册功能 使用系统需要登录,若未注册,则注册一个用户,用户名及邮箱不能与已存在的用户相同,否则无法注册成功。将当前用户密码信息做MD5处理,提高系统的安全性。(1)URL设计:/register/(2)Template:register1.html,表单提交方式为post。(3)View中函数的关键代码:#将当前用户信息做MD5处理importhashlib,random#导入哈希,获取MD5随机数md5=hashlib.md5()n=random.randint(100000,999999)s=request.POST['pwd']+str(n)#从表单中获取密码并添加干扰值md5.update(s.encode('utf-8'))#将要产生MD5的字串放进去ob.password_hash=md5.hexdigest()#获取MD5值ob.password_salt=nob.status=1ob.create_at=datetime.now()ob.update_at=datetime.now()ob.save()#添加操作(4)界面展示如下图4-2所示。图4-SEQ图4-\*ARABIC2注册界面4.2.2登录功能用户输入已存在的用户名以及正确的密码和验证码才能进入系统,进行对图片、音频信息的管理、检索。在View层使用了重定向,当用户名和密码与数据库中的数据一致时,跳转到系统首页,并将当前登录的用户信息以loginuser为key写入Session会话中,不一致时留在原来的页面。加入验证码,防止系统登录被恶意攻击,提高系统的安全性。(1)URL:/login/(2)Template:login1.html,表单提交方式为post。(3)View中函数的关键代码: #实现密码MD5加密importhashlib,random#导入哈希,获取MD5随机数md5=hashlib.md5()s=request.POST['pwd']+user.password_salt#从表单中获取密码并添加干扰值md5.update(s.encode('utf-8'))#将要产生MD5的字串放进去ifuser.password_hash==md5.hexdigest():#判断MD5值是否相等request.session['loginuser']=user.toDict()#登录成功,将当前登录的用户信息以loginuser为key写入session中returnredirect(reverse("index"))#重定向跳到系统首页#输出验证码defverify(request):#引入随机函数模块importrandomfromPILimportImage,ImageDraw,ImageFontbgcolor=(242,164,247)width=100height=25#创建画面对象im=Image.new('RGB',(width,height),bgcolor)#创建画笔对象draw=ImageDraw.Draw(im)#调用画笔的point()函数制造噪点foriinrange(0,100):xy=(random.randrange(0,width),random.randrange(0,height))fill=(random.randrange(0,255),255,random.randrange(0,255))draw.point(xy,fill=fill)#定义验证码的备选值str1='0123456789'#随机选取4各值作为验证码rand_str=''foriinrange(0,4):rand_str+=str1[random.randrange(0,len(str1))]#构造字体对象font=ImageFont.truetype('static/arial.ttf',21)#构造字体颜色fontcolor=(255,random.randrange(0,255),random.randrange(0,255))#绘制4个字draw.text((5,-3),rand_str[0],font=font,fill=fontcolor)draw.text((25,-3),rand_str[1],font=font,fill=fontcolor)draw.text((50,-3),rand_str[2],font=font,fill=fontcolor)draw.text((75,-3),rand_str[3],font=font,fill=fontcolor)#释放画笔deldraw#存入session,用于做进一步验证request.session['verifycode']=rand_str#内存文件操作importiobuf=io.BytesIO()#将图片保存在内存中,文件类型为pngim.save(buf,'png')#将内存中的png图片数据返回给浏览器returnHttpResponse(buf.getvalue(),'image/png')(4)界面展示如下图4-3所示图4-3登录界面4.3子系统模块 数据存储于图片表和音频表,与数据表映射的Model类为pics和audio。之后的功能实现都以图片子系统为例。4.3.1上传下载功能填写表单上的所有字段,并选择文件,点击上传。经业务逻辑及数据库判断所有数据有效则将存入数据库中,图片文件本身也将通过二进制流的方式存入图片数据表中的BLOB字段,否则会提示错误信息。点击下载,浏览器将以流的形式打开并获取相应路径下的文件。(1)URL设计:/system/picture/upload、/system/picture/down/<int:pid>(2)Template:upload.html,表单的提交方式为post(3)View中函数的关键代码:#执行文件上传处理ob=pics()#实例化pics类ob.pictures=request.FILES.get("pic",None)#获取提交表单中的文件ob.title=request.POST.get("title",None)ob.tid=request.POST.get("tid",None)ob.tag1=tag1ob.tag2=tag2ob.content=request.POST.get("content",None)data=request.FILES.get("pic",None)ob.data=data.read()#将图片文件存入BLOB类型字段中ob.created_at=datetime.now()ob.updated_at=datetime.now()ob.uid=request.session['loginuser'].get('uid',None)#获取用户idob.state=0#status为0上传未修改为1已修改1次为2已修改2次ob.count=0ob.scount=0ob.grade=0ob.save()#数据插入数据表#下载业务逻辑的关键代码ob=pics.objects.get(pid=pid)#获取要下载的数据path1="D:\PycharmProjects\mysiteWeb\static\media\pics"path2=urllib.parse.unquote(ob.pictures.url.split('/')[-1],encoding="utf8")file_path=os.path.join(path1,path2)response=FileResponse(open(file_path,'rb'))file_name=ob.pictures.url.split('/')[-1]#以流的形式下载文件,这样可以实现任意格式的文件下载response['Content-Type']='application/octet-stream'#Content-Disposition提供一个默认的文件名response['Content-Disposition']='attachment;filename={}'.format(file_name)(4)界面展示如下图4-4所示图4-4上传界面4.3.2分页浏览功能能实现对文件信息的分页显示,提供给用户友好的交互界面。借助Django分页器组件Paginator实例化分页对象,实现对信息的分页浏览。(1)URL设计:/system/picture/<int:pIndex>(2)Template:picture.html(3)View中函数的关键代码:#分页浏览图片信息 mywhere=[]#定义一个用于存储搜索条件的变量 #获取并判断图片类别条件 tid=request.GET.get("tid",None) iftid: list=list.filter(tid=tid) mywhere.append('?tid='+tid) else: tid=0 p=Paginator(list,12)#以12条数据一页实例化分页对象 #判断页码值是否有效 ifpIndex<1: pIndex=1 ifpIndex>p.num_pages: pIndex=p.num_pagesplist=p.page(pIndex)#获取当前页数据(4)界面展示如下图4-5所示图4-5分页浏览界面4.3.3信息编辑功能从数据库中获取已存储的信息将其显示在编辑页面,用户可在现有的基础上进行修改编辑。(1)URL设计:/system/picture/edit/<int:pid>(2)Template:edit_pic.html,表单的提交方式为post(3)View中的关键代码:#编辑表单信息逻辑defedit_pic(request,pid=0):try:ob=pics.objects.get(pid=pid)#获取要修改的数据context={"pic":ob}returnrender(request,"edit_pic.html",context)except:context={"message":"没有找到要修改的数据!"}returnrender(request,"info_pic.html",context) #修改更新数据库中数据的逻辑defupdate_pic(request):try:pid=request.POST['pid']#获取要修改的数据的PIDob=pics.objects.get(pid=pid)ob.title=request.POST['title']ob.type=request.POST['type']ob.tag1=request.POST['tag1']ob.tag2=request.POST['tag2']ob.content=request.POST['content']ob.save()message="修改成功!"returnrender(request,"edit_pic.html",{"message":message})except:message="修改失败!"returnrender(request,"edit_pic.html",{"message":message})(4)界面展示如下图4-6所示图4-6编辑修改界面4.3.4信息删除功能当文件信息删除时,利用jQuery再次确认是否需要删除,防止误操作。该功能通过确认后,该文件信息就会从数据库中删除。(1)URL设计:/system/picture/del/<int:pid>(2)Template:picture.html<script>//自定义执行信息删除提示判断,参数uu是成功的删除url地址functiondoDel(uu){if(confirm("确定要删除吗?")){//网页跳转window.location=uu;}}</script>(3)View中的关键代码:#删除数据的业务逻辑defdel_pic(request,pid=0):try:ob=pics.objects.get(pid=pid)#获取要删除的数据#print(ob.pid)ob.delete()#执行删除操作context={"info":"删除成功!"}except:context={"info":"删除失败!"}returnrender(request,"info_pic.html",context)(4)界面展示如下图4-7所示图4-7确认删除窗口4.4信息检索子模块该系统中信息的检索可通过导航浏览查找或者在搜索框中输入关键字进行搜索,在底层数据库都利用了查询语言,在视图层(View)使用了django的objects.filter()方法以及Q()查询。(1)导航查找功能在模板层(Template)中加入导航区域,其中是图片、音频的各类别选项,可以选择有特定的类别缩小范围再通过关键字进行检索。(2)多条件的关键字搜索功能在高级检索界面可选择图片或者音频文件的搜索,可选择相应类别,以及排列顺序,输入单个或多个关键字,并选择Or或And逻辑条件进行高效准确的搜索。 关键字检索的实现主要在于视图层(View)的设计,使用了django的objects.filter()可进行匹配查询,借助contains和Q()可以进行多字段或者多条件查询,查询范围为名称、标签和内容介绍。在视图层(View)中的关键代码: kw=request.GET.get("keyword",None)mywhere=""#定义一个用于存储搜索条件的变量ifkwisnotNone:list=pics.objects.filter(Q(title__contains=kw)|Q(type__contains=kw)|Q(tag1__contains=kw)|Q(content__contains=kw)|Q(title__contains=kw))mywhere="?keyword=%s"%(kw)else:list=pics.objects.filter()(3)多条件的关键字检索界面如下图4-8所示图4-8高级检索界面

5系统测试运用模块测试的方法,在程序代码编写完成后对系统进行测试,输入各种不同的正确和错误的条件,并运行程序检查程序是否根据原来设计的方式运行。(1)单元测试对用户登录功能、用户注册功能、信息上传下载功能、信息编辑功能、分页浏览功能、信息删除功能、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论