《基于Django的图片搜索网站-毕业论文.doc》由会员分享,可在线阅读,更多相关《基于Django的图片搜索网站-毕业论文.doc(45页珍藏版)》请在三一文库上搜索。
1、郑州大学毕业设计(论文) 题 目: 基于 Django 的图片搜索网站 1 基于 Django 的图片搜索网站 摘要:基于用户对图片查找的需求所设计的一个网站。该网站可以进行一系列的查询, 方便用户查找到自己感兴趣的图片。并通过上传可以增加图库里的图片,各个用户均可以 分享整个图库里的所有图片,并通过收藏按钮可以在自己的图集中看到所喜欢的图片。方 便用户收集喜欢的图片。 另外,结合 Django 这个 python 的 web 框架,搭建的平台简单安全,可移植性好。实 现一系列的功能,例如登陆、注册、上传等。涉及图片搜索的功能有按关键字搜索,按色 系搜索,按大小搜索等。对于用户来说,可以收藏喜
2、欢的图片,并下载。各个用户的上传 可以共享。此外,整个页面简单大方,使用 Bootstrap 风格,加上特有的轮播效果,展示图 片效果更好,用户体验效果比较好。 关键词: Python Django 图片搜索 Bootstrap 图像处理 2 Abstract: Based on the user needs to find the picture of a website. The site can do a series of queries for users to find their interesting pictures. Uploading pictures in the ga
3、llery, users can share all the pictures of the entire library, and the collection of a button can be concentrated in the Figure see the favorite pictures. It is convenient for users to collect pictures they like. In addition, combine with Django, which is a web framework of Python, can take an easy
4、work to build the platform. Owing to the features of django, such as safety, good portability, I can write it easily. The website has a series of functions, such as login, register, upload, watch my albums, have fun and others. The functions of search involving search by keywords, by colors or by si
5、ze. For the user, can collect favorite pictures, and download of it. Upload of each user can be shared. Furthermore, the entire page is simple and elegant. I use an open source package named bootstrap, the style of it is simple and graceful, showing pictures better. Key Words: PythonDjangosearchboot
6、strapimage processing 3 目录目录 第一章第一章系统概述系统概述5 5 1.1 总体概述.5 1.2 开发背景 6 1.3 开发目的 7 第二章第二章 系统分析系统分析8 8 2.1 技术可行性分析 8 2.1.1 开发技术综述8 2.1.2 MySQL 数据库的选用.12 2.1.3 技术可行性综述13 2.2 时间可行性 13 2.3 系统需求分析 13 2.3.1 系统开发运行环境13 2.3.2 系统功能概述13 2.3.3 系统数据流图14 2.4 系统总体结构分析结论 15 第三章第三章 系统设计系统设计1616 3.1 数据库设计 16 3.1.1 数据模型
7、(ER 图)16 3.1.2 数据库表及关系建立17 3.1.3 详细数据库结构设计18 3.2 系统概要设计 20 3.2.1 功能模块设计20 3.2.2 系统界面设计22 第四章第四章 系统的详细设计与实现系统的详细设计与实现2323 4.1 系统框架实现 23 4.1.1 Model 层24 4.1.2 Template 层.26 4.1.3 View 层的实现.32 4.2 系统功能模块实现 33 4.2.1 用户模块33 4.2.2 搜索模块36 4.2.3 随便看看模块37 4.3 系统设计与实现总结 37 5.1 测试概述 38 5.1.1 软件测试的目的38 5.1.2 测试
8、环境38 5.2 系统测试 38 4 结结 论论4040 致致 谢谢4141 参考文献参考文献4242 5 当今世界,互联网技术快速发展,人们对互联网的要求越来越多,衍生出 了一系列适应人们需求的网站。随着电子行业的快速发展,首当其冲的就是视 觉上的另类感受。人们可以通过一系列的图像处理软件绘制自己想要的图片, 可以通过图片表达一些情绪。比如,冷色调给人以沉稳,冷静的感觉,暖色调 则给人一种热情,开朗的心情。纵观网络上,形形色色的图片数不胜数,如何 分享它们,如何更快速地查找到自己所需要的图片是一个很庞大的问题。因此, 在此问题上,本人采用 python 的 django 框架搭建了一个图片搜
9、索网站的系统, 可以使用户将自己收藏的图片和他人分享,还可以搜索自己喜欢的图片并收藏, 降低用户查找图片的难度,以达到更好的用户体验。 第一章 系统概述 1.1 总体概述 当前高速发展的互联网技术已经成为人们快速获取,发布和传递消息的重 要渠道,颠覆了传统的信息传播方式,突破了传统交流方式中的时间空间壁垒, 极大的改变了人类从物质到精神,从形式到内容的种种活动。互联网上发布和 获取信息都是通过网站来实现的。因而网站日益成为企事业单位信息化建设中 不可避免的重要组成部分,越来越多的收到人们的重视。现在很多大学及其众 多部门都建立了自己的网站,希望通过互联网来实现宣传,交流以及资源的整 合。基于网
10、站的理念,本人设计并实现了这一图片搜索网站,该网站可以进行 一系列的查询,方便用户查找到自己感兴趣的图片。并通过上传可以增加图库 里的图片,各个用户均可以分享整个图库里的所有图片。 而且学习 python 可以掌握一门脚本语言并结合 Django 这个 python 的 web 框架,搭建的平台简单安全,可移植性好。 在国内外研究系统中:国内类似的网站有百度的图片搜索,搜狗图片搜索, topit.me 的网站等;国外的类似网站有谷歌图片搜索;还有基于图片内容的搜 索基于文本的图片搜索。 6 1.2 开发背景 网站是一种通讯工具,就像布告栏一样,人们可以通过网站来发布自己想 要公开的资讯信息,或
11、者利用网站来提供相关的网络服务。 下面介绍几种目前颇受关注的新技术: 1. PHP PHP 即 Hypertext Preprocessor(超文本预处理器),它是当今 Internet 上最为火热的脚本语言,其语法借鉴了 C、Java、PERL 等语言,但只需要很少 的编程知识你就能使用 PHP 建立一个真正交互的 Web 站点。 但 PHP 自身也存在缺点。首先,PHP 缺乏规模支持。其次,缺乏多层结构 支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、 表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。而 PHP 则缺乏这种支持。再加上 PHP 提供的数
12、据库接口支持不统一,这就使得它 不适合运用在电子商务中。 2. ASP ASP 即 Active Server Pages,它是微软开发的一种类似 HTML(超文本标识 语言)、Script(脚本)与 CGI(公用网关接口)的结合体,它允许用户使用许多已 有的脚本语言编写 ASP 的应用程序。ASP 的最大好处是可以包含 HTML 标签,也 可以直接存取数据库及使用无限扩充的 ActiveX 控件。通过使用 ASP 的组件和 对象技术,用户可以直接使用 ActiveX 控件,调用对象方法和属性,以简单的 方式实现强大的交互功能。 但 ASP 技术也非完美无缺,由于它基本上是局限于微软的操作系统
13、平台之 上,主要工作环境是微软的 IIS 应用程序结构,又因 ActiveX 对象具有平台特 性,所以 ASP 技术不能很容易地实现在跨平台 Web 服务器上工作。 3. JSP JSP 即 Java Server Pages,它是由 Sun Microsystem 公司于 1999 年 6 月 推出的新技术,是基于 Java Servlet 以及整个 Java 体系的 Web 开发技术。 JSP 和 ASP 在技术方面有许多相似之处,不过两者来源于不同的技术规范 组织,以至 ASP 一般只应用于 Windows 平台,而 JSP 则可以在 85%以上的服务 器上运行,而且基于 JSP 技术的
14、应用程序比基于 ASP 的应用程序易于维护和管 7 理,所以被许多人认为是未来最有发展前途的动态网站技术。 4.Python Web 框架 简单介绍两种框架: DjangoDjango 完美的文档,Django 的成功,我觉得很大一部分原因要归功于 Django 近 乎完美的官方文档(包括 Django book) 。 全套的解决方案,Django 象 Rails 一样,提供全套的解决方案(full- stack framework + batteries included) ,基本要什么有什么(比如: cache、session、feed、orm、geo、auth) ,而且全部 Django
15、 自己造,开发网 站应手的工具 Django 基本都给你做好了,因此开发效率是不用说的,出了问题 也算好找,不在你的代码里就在 Django 的源码里。 强大的 URL 路由配置,Django 让你可以设计出非常优雅的 URL,在 Django 里你基本可以跟丑陋的 GET 参数说拜拜。 自助管理后台,admin interface 是 Django 里比较吸引眼球的一项 contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。 web.pyweb.py Web.py 的设计理念力求精简(Keep it simple and powerful) ,总共就没 多少行代码,也不像 Py
16、lons 那样依赖大量的第三方模块,而是只提供的一个框 架所必须的一些东西,如:URL 路由、 Template、数据库访问,其它的就交给 用户自己去做好了。 一个框架精简的好处在于你可以聚焦在业务逻辑上,而不用太多的去关心 框架本身或受框架的干扰,同时缺点也很明显,许多事情你得自己操刀上。 1.3 开发目的 看到一些图片搜索网站感觉非常有意思,比如百度图片,谷歌图片以及搜 狗图片。对里面的机制很感兴趣,就想自己做一个类似的网站。专门的识图网 站来满足一些用户的需求。 而且学习 python 可以掌握一门脚本语言并结合 Django 这个 python 的 web 框架,搭建的平台简单安全,可
17、移植性好。 8 第二章 系统分析 2.1 技术可行性分析 2.1.1 开发技术综述 1. Python Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史, 成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常 见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数 程序设计语言使用大括号不一样,它使用缩进来定义语句块。 Python 的官方解释器是 CPython,该解释器用 C 语言编写,是一个由社区驱 动的自由软件,目前由 Python 软件基金会管理。 Python 支持命令式程序设计、面向对象程序设计、函数式编程、面向侧面 程序设计
18、、泛型编程多种编程范式。 Python 的设计哲学是“优雅” 、 “明确” 、 “简单” 。Python 开发者有意让违 反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。 例如: print “Hello, world!“ Hello, world! 2. Django Django 是一个开放源代码的 Web 应用框架,由 Python 写成。采用了 MVC 的 软件设计模式,即模型 M,视图 V 和控制器 C。Django 的主要目标是使得开发 复杂的、数据库驱动的网站变得简单。Django 注重组件的重用性和“可插拔性” ,敏捷开发和 DRY 法则(Dont Repe
19、at Yourself) 。在 Django 中 Python 被普 遍使用,甚至包括配置文件和数据模型。 Django 使你能够专注于 Web 应用上有 趣的关键性的东西。 为了达到这 个目标,Django 提供了通用 Web 开发模式的高度抽象,提供了频繁进行的编程 作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。 同时, 9 Django 尝试留下一些方法,来让你根据需要在 framework 之外来开发。 Django 基本元素: |_ Site/ |_ _init_.py |_ manage.py |_ urls.py |_ settings.py _init_.py
20、 :让 Python 把该目录当成一个开发包 (即一组模块)所需的 文件。 这是一个空文件,一般你不需要修改它。 manage.py :一种命令行工具,允许你以多种方式与该 Django 项目进行 交互。 键入 python manage.py help,看一下它能做什么。 你应当不需要 编辑这个文件;在这个目录下生成它纯是为了方便。5 settings.py :该 Django 项目的设置或配置。 查看并理解这个文件中可 用的设置类型及其默认值。 urls.py:Django 项目的 URL 设置。 可视其为你的 django 网站的目录。 目前,它是空的。 3. Django 式的 MVC
21、 设计模式 当前最为成功最为常用的设计架构之一当属 MVC-即模型-视图-控制器设计 模式了。它将应用软件的各类职能很好的分离开来,Django 大致上遵循这一设 计理念。当然比起 Java 框架里的 MVC,它略微有些不同。 1、模型(model)主要负责管理数据和核心的业务逻辑 2、视图(view)负责将数据展示给用户 3、控制器(Controller)接收用户输入并执行应用程序逻辑层面的工作 在 很多领域这一思路非常高效,不过 Django 的设计者们不是简单的照搬 这一模式,而且试图构建一个更适合 Web 应用程序开发的思路,因为 django 最 初 是用在新闻出版类的网站上,对新闻
22、事件的快速反应要求这套框架也必须 “快” 、 “准” 、 “狠” 。于是最终一些和 MVC 不太相同的设计目标产生了: 1、针对特定一组任务的代码必须更加好维护 2、程序开发应该被赋予更多的灵活性,因为不同的视图、控制器层会连接 到相同的模型层。这使得很多应用程序能够针对不同的客户使用不同的方法来 10 共享相同的业务逻辑和数据。 3、开发者只需学习与他工作相关的那部分系统功能。这种分工一方面降低 难度提高效率、另一方面也使开发者可以把注意力集中到自己业务问题上。 于是最终 Django 的架构被设计成 Model-Template-View 的形式,下面仔细 聊聊各个模块。 模型模型 将 模
23、型分离出来,这和 MVC 架构的 M 还是差不多的。Django 的 model 提 供一套简单的数据库交互接口用来封装核心业务逻辑。model 独立于系统的其 他模块,可以被系统其他任意模块访问。比如与数据库的交互可以直接通过 python 解释器访问,无需启动 web 服务器或者业务相关的逻辑层。 视图视图 虽然名字和 MVC 里的名字相同,但是实际上他们干的事有点不同。他是 MVC 里的部分 V 和全部 C 的结合体。django 的视图接受用户输入,包括简单的 请求,然后根据特定的交互逻辑运算,然后返回用户需要的数据。 视图通常用普通的 Python 函数来写,不过 Django1.3
24、 开始已经慢慢向类转 变,所有的内置视图都有了类版本,这样做就能最大限度的提升软件的复用。 严格来讲 python 支持所有的 Python callable 作为 View,其中包括实例方法, callable 类(实现_call_方法的类实例),柯西化或者装饰化的函数。 模板模板 view 负责的是如何得到用户需要的数据,至于怎么展现数据那就是模板的 事了。模板大约相当于 MVC 里边的 View。不过 django 里的模板功能还是相当 强大 的,比如他有叫 custom tag 的东西,按官方文档的说法,他是万能的, 他可以绕过视图直接和模型交互,所以对于页面上需要相同的数据只是不同的
25、 展现方式的东西,直接用它吧。 URLURL 配置配置 根据整个框架设计逻辑,Django 还提供了一个独立粘合层将视图暴露出去。 URL 使用正则表达式将 view 和 url 完美的对接起来。正因为使用正则表达式, 它的可读性和可维护性相当让人身心愉悦,妙不可言。所谓,RESTful 就是它 了! 11 松耦合松耦合 MVC 设计模式以及 Django 的 MTV 提倡不用功能的代码不应该也不需要知道 彼此的具体操作,也就是常说的松耦合。相反,紧耦合不同功能模块之间的依 赖程度很高。 紧耦合导致代码维护难等一些列问题,这些问题无疑会增加程序员的工作 负担,一点小改动就会牵扯方方面面,增加了
26、工作量也增加了成本。松耦合提 倡代码之间不能有知道彼此的具体操作。当然实际的项目中不同模块的代码引 用总是避免不了,关键就是隐藏细节。 4. Bootstrap Bootstrap 是著名的社交网站、微博的先驱 Twitter 在 2011 年 8 月推出的 开源 WEB 前端框架,集合 CSS 和 HTML,使用了最新的浏览器技术,为快速 WEB 开发提供了一套前端工具包,包括布局、网格、表格、按钮、表单、导航、提 示等。使用 Bootstrap 可以构建出非常优雅的前端界面,而且占用资源非常小。 GitHub 上这样介绍 bootstrap:简单灵活可用于架构流行的用户界面和交 互接口的
27、html,css,javascript 工具集。基于 html5、css3 的 bootstrap,具 有大量的诱人特性:友好的学习曲线,卓越的兼容性,响应式设计,12 列格网, 样式向导文档,自定义 JQuery 插件,完整的类库,基于 Less 等。 例如,要显示下面的格式的话,只需要引入 bootstrap 的 CSS,调用对应 的类即可。见图 2.2.1。 12 图图 2.2.12.2.1 bootstrapbootstrap 演示演示 代码如下: Legend Label name Example block-level help text here. Check me out Su
28、bmit 2.1.2 MySQL 数据库的选用 鉴于 MySQL 的一系列特性以及需求选用了 MySQL 作为本项目的数据库。特 性如下: 使用 C 和 C+编写,并使用了多种编译器进行测试,保证源代码的可移植性。 支持 AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows 等多 种操作系统。 为多种编程语言提供了 API。这些编程语言包括 C、C+、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby 和 Tcl 等。
29、支持多线程,充分利用 CPU 资源,支持多用户。 优化的 SQL 查询算法,有效地提高查询速度。 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够 作为一个库而嵌入到其他的软件中。 提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS 等都可以用作数据表名和数据列名。 13 提供 TCP/IP、ODBC 和 JDBC 等多种数据库连接途径。 提供用于管理、检查、优化数据库操作的管理工具。 可以处理拥有上千万条记录的大型数据库。 2.1.3 技术可行性综述 综上所述,这些成熟的技术和设计思想为本系统的开发提供了理论基础, 计算机基础设施的更新换
30、代也为开发系统提供了硬件基础。故本系统可以实现。 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
31、 撰写论文 2.3 系统需求分析 2.3.1 系统开发运行环境 鉴于系统的开发语言和数据库,采用如下的开发环境和工具: 开发环境: Windows 7,Python 2.7, Django 1.5.1 开发语言: Python 数 据 库: Mysql 开发工具: JetBrains PyCharm 2.7.1 14 2.3.2 系统功能概述 本网站由用户模块,搜索模块和随便看看模块三部分组成。其中搜索模块 是核心模块,具有很多功能。 鉴于本系统的性质,系统应实现以下功能: 1. 用户功能实现 (1)用户的注册 (2)用户的登录 (3)用户图片收藏 (4)用户收藏图片删除 (5)用户图片的上传
32、 2. 搜索功能的实现 (1)按图片关键字搜索 (2)按色系搜索 (3)按图片尺寸搜索 3. 随便看看功能的实现 (1)显示图片 (2)图片的画廊式播放 2.3.3 系统数据流图 顶层数据流图如图 2.3.3-1 所示: 游客注册用户 申请注册 注册信息 随便看看 搜索图片上传 搜索结果 收藏图片 删除收藏 搜索图片 搜索结果 ImageSearch网站 15 图图 2.3.3-12.3.3-1 顶层数据流图顶层数据流图 2.4 系统总体结构分析结论 通过对系统采用技术、数据库选择的可行性分析和对系统的需求分析,完 成了前期对系统模块及功能的划分。在此基础上,可以对系统数据库和功能模 块进行概
33、要设计。 16 第三章 系统设计 在前期的系统结构分析基础上,对系统进行概要设计。 3.1 数据库设计 数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数 据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息 要求和处理要求)。 3.1.1 数据模型(ER 图) 数据模型是是数据特征的抽象,从抽象层次上描述了系统的静态特征、动 态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架。描述 了数据结构、数据操作及数据约束。 通常,使用实体-联系图(简称为 ER 图)来建立数据模型。ER 图中包含了 实体(即数据对象) 、关系和属性 3 种基本成分,通常用
34、矩形框代表实体,用连 接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属 性,并用直线把实体(或关系)与其属性连接起来。 本系统的 ER 图: 用户 搜索 图片 上传 下载 游客 收藏 1 M N M 图册 查看 1 删除 N 图图 3.1.13.1.1 系统系统 ERER 图图 17 3.1.2 数据库表及关系建立 根据以上步骤建立数据库 imageSearch,依次建立下列表结构: 1. 用户信息表使用 Django 自带的用户系统表 auth_user 2. 图片表 image 3. 用户和图片关系表 user_image a) 用户和图片是多对多的关系 b) 可以通过
35、用户收藏,删除收藏而修改 4. 标签表 tag a) 标签和图片是多对多的关系 5. 颜色表 color a) 此表固定 6. 颜色图片关系表 color_image a) 图片和颜色是一对多的关系 b) 每张图片可以对应多个色系 7. 尺寸表 size a) 图片和尺寸是一对一的关系,但是尺寸不存入尺寸中,存入 image 表中 b) 此表固定 图图 3.1.23.1.2 数据库关系图数据库关系图 18 图图 3.1.33.1.3 DjangoDjango 自带数据库模型图自带数据库模型图 3.1.3 详细数据库结构设计 1. 用户信息表 用户信息表中存放的是用户的基本信息,包括用户名、密码
36、,其中密码 是 Django 自带的 PBKDF2 加密方法加密。 表表 3-13-1 auth_userauth_user 字段名称数据类型长度允许空字段描述 idint 主键 usernamevarchar50 用户名(邮箱) passwordvarchar30 用户密码 19 2. 图片表 存放图片的 ID 以及图片描述。 表表 3-23-2 imageimage 字段名称数据类型长度允许空字段描述 idint 主键 datedate 加入时间 descriptiontext 图片描述 widthint 图片宽度 heightint 图片高度 3. 用户图片关系表 由于用户和图片是多对多
37、的关系,所以表中存放图片和用户的关系映射。 表表 3-33-3 uaer_imageuaer_image 字段名称数据类型长度允许空字段描述 idint 主键 user_idint 用户 id image_idint 图片 id 4. 标签表 描述标签的名字和该标签下图片的数量。 表表 3-43-4 tagtag 字段名称数据类型长度允许空字段描述 idint 主键 namevarchar30 标签名字 frequencyint 该标签下图片数量 5. 颜色表 色系搜索的时候使用到的颜色,表中存储颜色的中文名,英文名以及 ID 号。 表表 3-53-5 colorcolor 字段名称数据类型长
38、度允许空字段描述 idint 主键 namevarchar30 颜色中文名字 ennamevarchar30 颜色英文名称 20 6. 图片与色系的关系表 由于图片与色系也是采用一对多的关系,所以这里存放图片以及对应色 系的关系映射。另外还存储了该图片在此色系下所占比重。因为一张图片计算 出来的色系有差别,所以有个比重的话显示效果会更好。 表表 3-63-6 color_imagecolor_image 字段名称数据类型长度允许空字段描述 idint 主键 color_idint 标签 ID image_idint 图片 ID valuedouble 颜色值的比重 7. 尺寸表 因为用户查询尺
39、寸的时候往往是有目的的,比如想查询壁纸,壁纸的大 小都是固定的,所以这个表示固定的写入一些常见的壁纸大小,方便生成标签, 用户可以直接点击查找。 表表 3-73-7 sizesize 字段名称数据类型长度允许空字段描述 idint 主键 widthint 宽度 heightint 高度 3.2 系统概要设计 根据需求分析的结果,对系统进行具体的实现方案的设计。 3.2.1 功能模块设计 由系统功能描述,可将本系统的功能分为四大模块,分别是用户模块、随 便看看模块、搜索模块。本系统的功能层次图如图 3.2.1 所示: 21 ImageSearch网站 按图片关键字搜索 用户模块搜索模块 按图片色
40、系搜索 按图片大小搜索 随便看看 显示最近上传的图片 登陆 注册 上传 查看我的图集 删除图集图片 收藏图片 图图 3.2.13.2.1 系统功能层次图系统功能层次图 本系统实现了如下功能: 1. 用户模块 (1)用户注册:非网站注册用户可以通过此模块注册成为本网站注册用户, 然后享用注册用户的权力。 (2)用户登录:注册用户通过此模块登录到网站,登录后便可使用所有注 册用户功能。 (3)图片上传:注册用户可以通过此模块上传图片。 (4)收藏图片:注册用户可以通过此模块点击自己喜欢图片收藏到自己的 图集里。 (5)删除图片:注册用户可以通过此模块从自己的图集中删除不喜欢的图 片。 (6)查看我
41、的图集:注册用户可以通过此模块查看自己喜欢过的图片。 2. 随便看看 (1)显示图片:注册用户和游客均可点击此模块显示最近上传的一百张 图片。 22 3. 搜索模块 (1)按图片关键字搜索:注册用户和游客均可点击此模块输入关键字搜索 该关键字下对应的图片。 (2)按色系搜索:注册用户和游客均可点击此模块按对应的颜色搜索图片, 并将其显示出来。 (3)按尺寸搜索:注册用户和游客均可点击此模块对应的尺寸搜索图片, 并将其显示出来。 3.2.2 系统界面设计 界面设计的实现可以分为两个部分。第一部分为站点的规划及草图的绘制, 这一部分可以在纸上完成。第二部分为网页的制作,这一过程是在计算机上完 成的
42、。 设计首页的第一步是设计版面布局。由于是图片网站,所以首页采取了画 廊似的图片,给人以宏大的感觉。 设计要遵循五个大的原则:统一、连贯、分割、对比及和谐。 统一,是指设计作品的整体性,一致性。设计作品的整体效果是至关重要 的,在设计中切勿将各组成部分孤立分散。 连贯,是指要注意页面的相互关系。设计中应利用各组成部分在内容上的 内在联系和表现形式上的相互呼应,实现视觉上和心理上的连贯,使整个页面 的各个部分融洽。 分割,是指将页面分成若干小块,小块之间有视觉上的不同。 对比就是通过矛盾和冲突,使设计更加富有生气。在使用对比的时候应慎 重,对比过强容易破坏美感,影响统一。 和谐是指整个页面符合美
43、的法则,浑然一体。 本系统采用 Bootstrap 风格的界面设计,简单大方。 23 第四章 系统的详细设计与实现 详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。经过 这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码实现阶段 可以把这个描述直接翻译成用某种程序设计语言书写的程序。 4.1 系统框架实现 在本系统中,我们采用 Django 技术进行开发。Django 也是一个 MVC 框架。 但是在 Django 中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model) 、模板(Template)和视图(Views) ,称为 MTV
44、 模式: M 代表模型(Model) ,即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何 在页面或其他类型文档中进行显示。 V 代表视图(View) ,即业务逻辑层。 该层包含存取模型及调取恰当模板 的相关逻辑。 你可以把它看作模型与模板之间的桥梁。 在Agile Web Development with Rails中有这样一张图对 MVC 模式进行了 很好的解释,见图 4.1.1: 图图 4.1.14.1.1 DjangoMVCDjangoMVC 图图
45、需要注意的是,不能简单的把 Django 视图认为是 MVC 控制器,把 Django 模板认为 MVC 视图。 24 Django 视图 不处理用户输入,而仅仅决定要展现哪些数据给用户; Django 模板 仅仅决定如何展现 Django 视图指定的数据。见图 4.1.2: 图图 4.1.24.1.2 DjangoDjango 结构图结构图 4.1.1 Model 层 Model 描述了数据模型,通过 Python 的类实现与关系数据库的对应(即 著名的 ORM Object Relation Mapping) 。通常,我们定义的每个 Model 对 象都对于 一个数据库表。 1. 每个 M
46、odel 都是 django.db.models.Model 的子类 2. Model 对象的每个属性都是数据表中的一个区域 25 3. 通过这些对应,Django 可以自动同数据库交互 一旦我们在定义好了 models ,我们需要告诉 Django 才能使用。这一步 在开发 过程中就是: 创建 app ,设计 models.py ,在 project 的 settings.py 文件 的 INSTALLED_APPS 里添加此 app 的加载路径,使用 ./manage.py syncdb 更新 数据库。 1. 用户 #user class User(models.Model) : user
47、_name = models.CharField(max_length=50) nick_name = models.CharField(max_length=30) sex = models.CharField(max_length=10) password = models.CharField(max_length=30) birthday = models.DateField() register_time = models.DateTimeField() class Meta : db_table = uuser 2. 图片 #image class Image(models.Mode
48、l) : description = models.TextField() width = models.IntegerField() height = models.IntegerField() like = models.BooleanField() class Meta : db_table = uimage 3. 用户图片关系 #user_image class User_image(models.Model) : user_id = models.IntegerField() img_id = models.IntegerField() class Meta : db_table =
49、 uuser_image 4. 标签 #tag class Tag(models.Model) : 26 name = models.CharField(max_length=100) frequency = models.IntegerField() class Meta : db_table = utagusicMgr. #user 5. 颜色 #color class Color(models.Model) : name = models.CharField(max_length=30) enname = models.CharField(max_length=30) class Meta : db_table = ucolor 6. 颜色图片关系 #color_image class Color_image(models.Model) : img_id = models.IntegerField() color_id = models.IntegerField() value = models.FloatField() class Meta : db_tab
链接地址:https://www.31doc.com/p-3920011.html