毕业论文张晓媛2480144.docx
- 文档编号:29715937
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:42
- 大小:2.56MB
毕业论文张晓媛2480144.docx
《毕业论文张晓媛2480144.docx》由会员分享,可在线阅读,更多相关《毕业论文张晓媛2480144.docx(42页珍藏版)》请在冰豆网上搜索。
毕业论文张晓媛2480144
郑州大学毕业设计(论文)
题目:
基于Django的图片搜索网站
指导教师:
姜志明职称:
副教授
学生姓名:
张晓媛学号:
20092480144
专业:
软件工程
院(系):
信息工程学院
完成时间:
2013年5月15日
2013年05月15日
基于Django的图片搜索网站
摘要:
基于用户对图片查找的需求所设计的一个网站。
该网站可以进行一系列的查询,方便用户查找到自己感兴趣的图片。
并通过上传可以增加图库里的图片,各个用户均可以分享整个图库里的所有图片,并通过收藏按钮可以在自己的图集中看到所喜欢的图片。
方便用户收集喜欢的图片。
另外,结合Django这个python的web框架,搭建的平台简单安全,可移植性好。
实现一系列的功能,例如登陆、注册、上传等。
涉及图片搜索的功能有按关键字搜索,按色系搜索,按大小搜索等。
对于用户来说,可以收藏喜欢的图片,并下载。
各个用户的上传可以共享。
此外,整个页面简单大方,使用Bootstrap风格,加上特有的轮播效果,展示图片效果更好,用户体验效果比较好。
关键词:
PythonDjango图片搜索Bootstrap图像处理
Abstract:
Basedontheuserneedstofindthepictureofawebsite.Thesitecandoaseriesofqueriesforuserstofindtheirinterestingpictures.Uploadingpicturesinthegallery,userscanshareallthepicturesoftheentirelibrary,andthecollectionofabuttoncanbeconcentratedintheFigureseethefavoritepictures.Itisconvenientforuserstocollectpicturestheylike.
Inaddition,combinewithDjango,whichisawebframeworkofPython,cantakeaneasyworktobuildtheplatform.Owingtothefeaturesofdjango,suchassafety,goodportability,Icanwriteiteasily.Thewebsitehasaseriesoffunctions,suchaslogin,register,upload,watchmyalbums,havefunandothers.Thefunctionsofsearchinvolvingsearchbykeywords,bycolorsorbysize.Fortheuser,cancollectfavoritepictures,anddownloadofit.Uploadofeachusercanbeshared.Furthermore,theentirepageissimpleandelegant.Iuseanopensourcepackagenamedbootstrap,thestyleofitissimpleandgraceful,showingpicturesbetter.
KeyWords:
PythonDjangosearchbootstrapimageprocessing
当今世界,互联网技术快速发展,人们对互联网的要求越来越多,衍生出了一系列适应人们需求的网站。
随着电子行业的快速发展,首当其冲的就是视觉上的另类感受。
人们可以通过一系列的图像处理软件绘制自己想要的图片,可以通过图片表达一些情绪。
比如,冷色调给人以沉稳,冷静的感觉,暖色调则给人一种热情,开朗的心情。
纵观网络上,形形色色的图片数不胜数,如何分享它们,如何更快速地查找到自己所需要的图片是一个很庞大的问题。
因此,在此问题上,本人采用python的django框架搭建了一个图片搜索网站的系统,可以使用户将自己收藏的图片和他人分享,还可以搜索自己喜欢的图片并收藏,降低用户查找图片的难度,以达到更好的用户体验。
第一章系统概述
1.1总体概述
当前高速发展的互联网技术已经成为人们快速获取,发布和传递消息的重要渠道,颠覆了传统的信息传播方式,突破了传统交流方式中的时间空间壁垒,极大的改变了人类从物质到精神,从形式到内容的种种活动。
互联网上发布和获取信息都是通过网站来实现的。
因而网站日益成为企事业单位信息化建设中不可避免的重要组成部分,越来越多的收到人们的重视。
现在很多大学及其众多部门都建立了自己的网站,希望通过互联网来实现宣传,交流以及资源的整合。
基于网站的理念,本人设计并实现了这一图片搜索网站,该网站可以进行一系列的查询,方便用户查找到自己感兴趣的图片。
并通过上传可以增加图库里的图片,各个用户均可以分享整个图库里的所有图片。
而且学习python可以掌握一门脚本语言并结合Django这个python的web框架,搭建的平台简单安全,可移植性好。
在国内外研究系统中:
国内类似的网站有XX的图片搜索,搜狗图片搜索,topit.me的网站等;国外的类似网站有谷歌图片搜索;还有基于图片内容的搜索基于文本的图片搜索。
1.2开发背景
网站是一种通讯工具,就像布告栏一样,人们可以通过网站来发布自己想要公开的资讯信息,或者利用网站来提供相关的网络服务。
下面介绍几种目前颇受关注的新技术:
1.PHP
PHP即HypertextPreprocessor(超文本预处理器),它是当今Internet上最为火热的脚本语言,其语法借鉴了C、Java、PERL等语言,但只需要很少的编程知识你就能使用PHP建立一个真正交互的Web站点。
但PHP自身也存在缺点。
首先,PHP缺乏规模支持。
其次,缺乏多层结构支持。
对于大负荷站点,解决方法只有一个:
分布计算。
数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。
而PHP则缺乏这种支持。
再加上PHP提供的数据库接口支持不统一,这就使得它不适合运用在电子商务中。
2.ASP
ASP即ActiveServerPages,它是微软开发的一种类似HTML(超文本标识语言)、Script(脚本)与CGI(公用网关接口)的结合体,它允许用户使用许多已有的脚本语言编写ASP的应用程序。
ASP的最大好处是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件。
通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。
但ASP技术也非完美无缺,由于它基本上是局限于微软的操作系统平台之上,主要工作环境是微软的IIS应用程序结构,又因ActiveX对象具有平台特性,所以ASP技术不能很容易地实现在跨平台Web服务器上工作。
3.JSP
JSP即JavaServerPages,它是由SunMicrosystem公司于1999年6月推出的新技术,是基于JavaServlet以及整个Java体系的Web开发技术。
JSP和ASP在技术方面有许多相似之处,不过两者来源于不同的技术规范组织,以至ASP一般只应用于Windows平台,而JSP则可以在85%以上的服务器上运行,而且基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理,所以被许多人认为是未来最有发展前途的动态网站技术。
4.PythonWeb框架
简单介绍两种框架:
Django
完美的文档,Django的成功,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Djangobook)。
全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stackframework+batteriesincluded),基本要什么有什么(比如:
cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网站应手的工具Django基本都给你做好了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。
强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本可以跟丑陋的GET参数说拜拜。
自助管理后台,admininterface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。
web.py
Web.py的设计理念力求精简(Keepitsimpleandpowerful),总共就没多少行代码,也不像Pylons那样依赖大量的第三方模块,而是只提供的一个框架所必须的一些东西,如:
URL路由、Template、数据库访问,其它的就交给用户自己去做好了。
一个框架精简的好处在于你可以聚焦在业务逻辑上,而不用太多的去关心框架本身或受框架的干扰,同时缺点也很明显,许多事情你得自己操刀上。
1.3开发目的
看到一些图片搜索网站感觉非常有意思,比如XX图片,谷歌图片以及搜狗图片。
对里面的机制很感兴趣,就想自己做一个类似的网站。
专门的识图网站来满足一些用户的需求。
而且学习python可以掌握一门脚本语言并结合Django这个python的web框架,搭建的平台简单安全,可移植性好。
第二章系统分析
2.1技术可行性分析
2.1.1开发技术综述
1.Python
Python是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。
它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。
它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。
Python的官方解释器是CPython,该解释器用C语言编写,是一个由社区驱动的自由软件,目前由Python软件基金会管理。
Python支持命令式程序设计、面向对象程序设计、函数式编程、面向侧面程序设计、泛型编程多种编程范式。
Python的设计哲学是“优雅”、“明确”、“简单”。
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。
例如:
>>>print"Hello,world!
"
Hello,world!
2.Django
Django是一个开放源代码的Web应用框架,由Python写成。
采用了MVC的软件设计模式,即模型M,视图V和控制器C。
Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。
Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don'tRepeatYourself)。
在Django中Python被普遍使用,甚至包括配置文件和数据模型。
Django使你能够专注于Web应用上有趣的关键性的东西。
为了达到这个目标,Django提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。
同时,Django尝试留下一些方法,来让你根据需要在framework之外来开发。
Django基本元素:
|____Site/
|______init__.py
|____manage.py
|____urls.py
|____settings.py
__init__.py:
让Python把该目录当成一个开发包(即一组模块)所需的文件。
这是一个空文件,一般你不需要修改它。
manage.py:
一种命令行工具,允许你以多种方式与该Django项目进行交互。
键入pythonmanage.pyhelp,看一下它能做什么。
你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。
5
settings.py:
该Django项目的设置或配置。
查看并理解这个文件中可用的设置类型及其默认值。
urls.py:
Django项目的URL设置。
可视其为你的django网站的目录。
目前,它是空的。
3.Django式的MVC设计模式
当前最为成功最为常用的设计架构之一当属MVC-即模型-视图-控制器设计模式了。
它将应用软件的各类职能很好的分离开来,Django大致上遵循这一设计理念。
当然比起Java框架里的MVC,它略微有些不同。
1、模型(model)主要负责管理数据和核心的业务逻辑
2、视图(view)负责将数据展示给用户
3、控制器(Controller)接收用户输入并执行应用程序逻辑层面的工作
在很多领域这一思路非常高效,不过Django的设计者们不是简单的照搬这一模式,而且试图构建一个更适合Web应用程序开发的思路,因为django最初是用在新闻出版类的网站上,对新闻事件的快速反应要求这套框架也必须“快”、“准”、“狠”。
于是最终一些和MVC不太相同的设计目标产生了:
1、针对特定一组任务的代码必须更加好维护
2、程序开发应该被赋予更多的灵活性,因为不同的视图、控制器层会连接到相同的模型层。
这使得很多应用程序能够针对不同的客户使用不同的方法来共享相同的业务逻辑和数据。
3、开发者只需学习与他工作相关的那部分系统功能。
这种分工一方面降低难度提高效率、另一方面也使开发者可以把注意力集中到自己业务问题上。
于是最终Django的架构被设计成Model-Template-View的形式,下面仔细聊聊各个模块。
模型
将模型分离出来,这和MVC架构的M还是差不多的。
Django的model提供一套简单的数据库交互接口用来封装核心业务逻辑。
model独立于系统的其他模块,可以被系统其他任意模块访问。
比如与数据库的交互可以直接通过python解释器访问,无需启动web服务器或者业务相关的逻辑层。
视图
虽然名字和MVC里的名字相同,但是实际上他们干的事有点不同。
他是MVC里的部分V和全部C的结合体。
django的视图接受用户输入,包括简单的请求,然后根据特定的交互逻辑运算,然后返回用户需要的数据。
视图通常用普通的Python函数来写,不过Django1.3开始已经慢慢向类转变,所有的内置视图都有了类版本,这样做就能最大限度的提升软件的复用。
严格来讲python支持所有的Pythoncallable作为View,其中包括实例方法,callable类(实现__call__方法的类实例),柯西化或者装饰化的函数。
模板
view负责的是如何得到用户需要的数据,至于怎么展现数据那就是模板的事了。
模板大约相当于MVC里边的View。
不过django里的模板功能还是相当强大的,比如他有叫customtag的东西,按官方文档的说法,他是万能的,他可以绕过视图直接和模型交互,所以对于页面上需要相同的数据只是不同的展现方式的东西,直接用它吧。
URL配置
根据整个框架设计逻辑,Django还提供了一个独立粘合层将视图暴露出去。
URL使用正则表达式将view和url完美的对接起来。
正因为使用正则表达式,它的可读性和可维护性相当让人身心愉悦,妙不可言。
所谓,RESTful就是它了!
松耦合
MVC设计模式以及Django的MTV提倡不用功能的代码不应该也不需要知道彼此的具体操作,也就是常说的松耦合。
相反,紧耦合不同功能模块之间的依赖程度很高。
紧耦合导致代码维护难等一些列问题,这些问题无疑会增加程序员的工作负担,一点小改动就会牵扯方方面面,增加了工作量也增加了成本。
松耦合提倡代码之间不能有知道彼此的具体操作。
当然实际的项目中不同模块的代码引用总是避免不了,关键就是隐藏细节。
4.Bootstrap
Bootstrap是著名的社交网站、微博的先驱Twitter在2011年8月推出的开源WEB前端框架,集合CSS和HTML,使用了最新的浏览器技术,为快速WEB开发提供了一套前端工具包,包括布局、网格、表格、按钮、表单、导航、提示等。
使用Bootstrap可以构建出非常优雅的前端界面,而且占用资源非常小。
GitHub上这样介绍bootstrap:
简单灵活可用于架构流行的用户界面和交互接口的html,css,javascript工具集。
基于html5、css3的bootstrap,具有大量的诱人特性:
友好的学习曲线,卓越的兼容性,响应式设计,12列格网,样式向导文档,自定义JQuery插件,完整的类库,基于Less等。
例如,要显示下面的格式的话,只需要引入bootstrap的CSS,调用对应的类即可。
见图2.2.1。
图2.2.1bootstrap演示
代码如下:
窗体底端
2.1.2MySQL数据库的选用
鉴于MySQL的一系列特性以及需求选用了MySQL作为本项目的数据库。
特性如下:
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
支持AIX、BSDi、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、NetBSD、OpenBSD、OS/2Wrap、Solaris、SunOS、Windows等多种操作系统。
为多种编程语言提供了API。
这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
支持多线程,充分利用CPU资源,支持多用户。
优化的SQL查询算法,有效地提高查询速度。
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
提供用于管理、检查、优化数据库操作的管理工具。
可以处理拥有上千万条记录的大型数据库。
2.1.3技术可行性综述
综上所述,这些成熟的技术和设计思想为本系统的开发提供了理论基础,计算机基础设施的更新换代也为开发系统提供了硬件基础。
故本系统可以实现。
2.2时间可行性
本系统所用到的技术都是本人现学的,其中Python是在寒假期间学习的,参考书目为《Python基础教程》。
因为大学期间接触过JSP编程的MVC模式,所以对于Django很容易上手。
计划如下:
2013.01.20-2013.02.20
学习Python
2013.02.21-2013.03.20
学习Django并进行项目设计
2013.03.21-2013.04.10
进一步根据所学内容进行详细设计
2013.04.11-2013.05.10
编写代码
2013.05.11-2013.05.15
撰写论文
2.3系统需求分析
2.3.1系统开发运行环境
鉴于系统的开发语言和数据库,采用如下的开发环境和工具:
开发环境:
Windows7,Python2.7,Django1.5.1
开发语言:
Python
数据库:
Mysql
开发工具:
JetBrainsPyCharm2.7.1
2.3.2系统功能概述
本网站由用户模块,搜索模块和随便看看模块三部分组成。
其中搜索模块是核心模块,具有很多功能。
鉴于本系统的性质,系统应实现以下功能:
1.用户功能实现
(1)用户的注册
(2)用户的登录
(3)用户图片收藏
(4)用户收藏图片删除
(5)用户图片的上传
2.搜索功能的实现
(1)按图片关键字搜索
(2)按色系搜索
(3)按图片尺寸搜索
3.随便看看功能的实现
(1)显示图片
(2)图片的画廊式播放
2.3.3系统数据流图
顶层数据流图如图2.3.3-1所示:
图2.3.3-1顶层数据流图
2.4系统总体结构分析结论
通过对系统采用技术、数据库选择的可行性分析和对系统的需求分析,完成了前期对系统模块及功能的划分。
在此基础上,可以对系统数据库和功能模块进行概要设计。
第三章系统设计
在前期的系统结构分析基础上,对系统进行概要设计。
3.1数据库设计
数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
3.1.1数据模型(ER图)
数据模型是是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架。
描述了数据结构、数据操作及数据约束。
通常,使用实体-联系图(简称为ER图)来建立数据模型。
ER图中包含了实体(即数据对象)、关系和属性3种基本成分,通常用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。
本系统的ER图:
图3.1.1系统ER图
3.1.2数据库表及关系建立
根据以上步骤建立数据库imageSearch,依次建立下列表结构:
1.用户信息表使用Django自带的用户系统表auth_user
2.图片表image
3.用户和图片关系表user_image
a)用户和图片是多对多的关系
b)可以通过用户收藏,删除收藏而修改
4.标签表tag
a)标签和图片是多对多的关系
5.颜色表color
a)此表固定
6.颜色图片关系表color_image
a)图片和颜色是一对多的关系
b)每张图片可以对应多个色系
7.尺寸表size
a)图片和尺寸是一对一的关系,但是尺寸不存入尺寸中,存入image表中
b)
此表固定
图3.1.2数据库关系图
图3.1.3Django自带数据库模型图
3.1.3详细数据库结构设计
1.用户信息表
用户信息表中存放的是用户的基本信息,包括用户名、密码,其中密码是Django自带的PBKDF2加密方法加密。
表3-1auth_user
字段名称
数据类型
长度
允许空
字段描述
id
int
主键
username
varchar
50
用户名(邮箱)
password
varchar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 张晓媛 2480144