基于python的博客系统的设计与实现计算机专业_第1页
基于python的博客系统的设计与实现计算机专业_第2页
基于python的博客系统的设计与实现计算机专业_第3页
基于python的博客系统的设计与实现计算机专业_第4页
基于python的博客系统的设计与实现计算机专业_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、中中 文文 摘摘 要要伴着互联网技术的全面普及与飞速发展,很多技术都实现了开源。而开源技术如何被广为人知,博客系统正好可以满足这个需求。博客系统可以进行朋友间的互动交流,发布自己感兴趣的话题和技术,内容丰富。提供个人的总结和交流,结交更多的朋友和表达自己的想法。博客可以随时发布,方便而便捷。此次毕业设计采用 python 语言开发一个博客系统,系统使用eclipse 开发平台,在开发环境中,对该软件进行设计和相关模块的编码和调试。数据库使用 SQLite。系统运行流畅,各个模块分工明确,有良好的交互性。使得使用者在交流时,体会到简洁方便。整个博客系统拥有邮箱认证,发表并且评论博文的功能。查看博

2、主资料,并且关注博主的功能,达到博客系统的交流功能。关键字关键字 python 博客系统 SQLite eclipse 外外文文摘摘要要T Ti it tl le e The design and implementation of blog system based on Python AbstractAbstractWith the popularity of Internet technology and the rapid development, many technologies have achieved open source. And how open source tech

3、nology is widely known, the blog system can meet this demand. Blog system can be a friend of the interaction between the exchange, publishing their own interest in the topic and technology, rich in content. Provide personal summary and communication, make more friends and express their ideas. Blog c

4、an be released at any time, convenient and convenient.This graduation design uses Python language to develop a blog system, the system uses the eclipse development platform. In the development environment, the design of the software and the coding and debugging of the related modules are carried out

5、. Database using SQLite. So that users in the exchange, to realize the simple and convenient. The entire blog system has a mailbox certification, published and commented on the function of blog posts. View the main information, and pay attention to the bloggers function, to achieve the communication

6、 function of the blog system.keywordskeywords Python, Blog system, SQLite, Eclipsei目录前言.1第一章 绪论.21.1 课题背景 .21.2 课题意义 .2第二章 系统主要技术简介 .42.1 PYTHON简介 .42.2 SQLITE简介 .52.3 ECLIPSE简介 .6第三章 系统需求与分析 .73.1 系统功能需求 .73.2 开发环境需求 .11第四章 系统设计 .124.1 系统功能设计.124.2 数据库设计 .16第五章 系统功能模块实现 .195.1 注册及用户认证 .195.2 用户资料 .

7、215.3 博客文章 .235.4 关注作者 .245.5 评论管理 .25第六章 系统测试 .276.1 测试环境 .276.2 测试目的 .276.3 测试内容 .27ii6.4 测试实例 .29第七章 总结.35参考文献 .36致谢.371前言随着互联网技术的普及与飞速发展,信息文化之间的交流也得到了渠道的拓展。在本次毕业设计中,采用 Python 技术进行 WEB 开发,涉及到构想设计思路、实现功能方法、解决异常步骤等等,这与以开发的 Java 工程一样。唯一不同的是本次使用的 Python 语言开发,是一种新的体验。在一定程度上,我觉得本次毕业设计还算是比较顺利,虽然引进了不少新技术

8、,也遇到新的难题,但在不断的摸索中,都逐一解决了。 博客从 2002 年开始引入中国,当时数量不足 1 万人。blog 的中文名“博客”由方兴东、王俊秀提出的。因为流行、实用的特点,所以开发博客系统让我对此次毕业设计提高了很大兴趣,邮箱服务器发送邮件、时间的本地化、正则匹配的应用、数据库之间的关系等等问题也困扰了好久。在这过程中,设计思路逐渐明了,直至问题逐一解决。事实上,解决开发过程中遇到的问题时,并没有那么容易,每一次对问题的克服都是对程序代码的一种熟悉和理解。本次设计,主要有登录模块、博客文章管理模块、评论模块、用户资料模块、热点博客模块。登录模块负责检验用户的有效性,防止恶意的攻击,拥

9、有邮箱的验证。博客管理模块中,用户可以编辑自己想发布的一些文章和修改这些文章,用户可以使用 markdown 的语法来让文章更加正规化。评论模块中,登录用户可以对任何文章进行评论,评论显示在文章的下方。言论管理员可以对评论进行管理,如有言论不正当的,也可以将言论屏蔽。热点博客将博客显示按照评论进行排序,显示热度高的博客。2第一章 绪论1.1 课题背景在博客系统没有被开发使用之前,网民们经常会浏览一些发布论坛的网站,发表文章观点或者通过类似于腾讯 QQ 中的空间,来表达内心的看法与见解,可是通过使用这些媒介发布的文章都是零散的、杂乱无章的。博客系统的出现,使用者可以把自己身处的境遇而激发的想法或

10、者感受,通过博客系统发布到网站上与大家一起分享。每次编写博文的时候,又会想到一些新奇的想法。虽然某些想法可能没有什么深度,但是没打一个字都是对生活中所遇到事的一种思考与总结,洋洋洒洒的写完一篇博文会得到一种满足感,一种对自己当回作家的满足感。生活中的点滴小事都会使人们迸发奇思妙想,甚至是和亲戚朋友一次的谈天中的想法。监督自己把学到的东西或者是遇到困难的解决方案,亦或是对生活琐事的有感而发,这都是编写博客的目的。督促自己每天做好总结和反思,一天中学到了什么,遇到了什么困难,体会到了什么感受。很多各界的精英们也踏上了使用博客的道路。譬如记者、明星、企业等都有了自己的博客网站,形成了一种独特的百家争

11、鸣的状态。企业界引入博客系统,为的是分享公司内部的一些学习资料和网络营销策略。教育部门引进博客系统,为的是管理内部的知识仓库和沟通教学方法。又如程序员使用博客系统来介绍自己的系统项目,将项目开源化。不仅可以让其他用户学习新知识,也可以对项目进行改进和扩展。1.2 课题意义博客的发展适应了全球范围内知识社会来临的发展脚步。由于我国处于一个组织机构信息化的初级阶段,博客是一种充分发挥个人主导能力和具有积极意义的非正式知识管理工具还具有深度沟通交流的功能,博客系统的意义在于传播我们国家的知识、扩散知识和有效提升组织的学习和创新能。博客系统用户的急剧增长以及系统得到广泛领域的应用,有助于推动中国学习型

12、社会发展脚步。 本系统结合中国现实的情况以及博客互动性的特点进行设计开发,旨在为用户3提供一个技术、学习、交流的平台,促进用户之间的沟通;并根据博客共享性的特点,推动用户间的知识交流,使博客系统成为一个知识分享的园地。此次毕业设计的意义在于运用在学校学到的技术和在学校培养的自学能力进行独立设计一个系统。通过深入社会实践、了解社会结构、完成毕业设计任务并且撰写论文等,着重培养我们的综合分析能力和解决问题的能力和提高独立性、管理组织和提高社交能力。运用在公司学到的知识加以应用,和公司同事加强技术交流,提升技术和社交能力。这也是对自身在学校学到的知识和自身自学能力的检验。本次所用到的技术为 pyth

13、on 语言,此前并没有在学校学过,是对综合素质与工程实践能力培养效果的全面检验,这也是对自己的一次挑战!当然此项毕业设计还涉及web 知识,数据库知识等。并且用现在比较流行的技术来做毕业设计,也是选择了一个明朗的方向。4第二章 系统主要技术简介2.1 Python 简介Python 和 Java 一样都属于面向对象的语言,不同的是 Python 是一种直译式计算机程序设计语言,也是功能十分强大的多平台语言,具有近二十年的发展历史,拥有成熟性和稳定性。Python 包含了一系列功能完善并且容易理解的标准库,快速轻松的完成比较多见的任务。Python 语法具有简捷和清晰的特点,与其它计算机编程语言

14、不同的是,它采用缩进区分语句块。Python 支持采用命令的编程方式、面向对象编程、面向函数式编程、面向切面编程、泛型编程等多种程序设计方式。和很多动态语言如Scheme、Ruby、Perl、Tcl 等一样,Python 同样拥有垃圾回收的功能,可以自动管理系统的内存使用。它经常被用作脚本语言来处理后台任务和 Web 编程,然而它也能非常完美的完成多种高阶任务。Python 虚拟机基本上可以在所有的操作系统中运行。使用一些工具诸如 py2exe、PyPy、PyInstaller 可以将 Python 源代码转换成可以不需要 Python 解释器就可以执行的程序。Python 特点:1. 简单易

15、学:Python 上手比较快,因为 Python 简单并且丰富的说明文档。2. 运行速度快:Python 的底层语言是用 C 语言,Python 中很多标准库还有第三方库也都是运用 C 语言 写的,运行速度非常迅速。3. 开源性:Python 是众多的开放源代码之一。使用 Python 的程序员可以随意的复制、阅读源代码。4. 高层语言:运用 Python 语言编写程序时不需要考虑一些例如如何管理程序使用内存一类的底层细节。5. 可移植性:由于 Python 开源的特点,Python 可以被移植到许多平台上(经过代码的修改使它能在不同平台上工作)。例如 pc 端的系统 Linux、Window

16、s 等、还有移动端的 Symbian 以及 Google 基于 linux 开发的 android 平台。6. 解释性:用 C 语言或 C+写的程序可以从源文件(C 或 C+语言)转换成一个当前计算机所使用的语言(即 0 和 1)。通过这个步骤编译器和不同的标记、选项来完成任务。5使用计算机内部系统时,Python 解释转换源代码转换成称为字节代码的中间代码,然后将其转换成由当前计算机使用,并运行该代码的机器语言。这一过程使得它更容易使用 Python 。同时 Python 程序变得更容易移植。7. 面向对象:Python 不仅支持面向过程的编程也支持面向对象的编程。在这个过程中取向的语言中,

17、程序由一个过程或只是一个可重复使用的代码功能建立起来。8. 可扩展性:如果你想有一个关键的代码运行得更快或者希望某些代码不开放,你可以使用 C 或 C +写一些程序功能,然后调用他们的 Python 程序。9. 可以嵌入性:开发者可以嵌入 Python 代码到 C / C +程序,它提供了脚本功能的系统用户使用权限。10. 丰富的库:Python 标准库很庞大。它可以帮助你处理各种工作,包括正则表达式、 文档生成、单元测试等等。只要安装了 Python,所有这些功能都是可用的。这被称作 Python 的“功能齐全”理念。除了标准库以 外,还有许多其他高质量的库,如 wxPython、Twist

18、ed 和 Python 图像库等等。 11. 规范的代码:Python 使用 tab 键来分割语句使得代码具有良好可读性。并且 Python 语言写的程序代码不需要编译成二进制代码。2.2 SQLite 简介SQLite,是一个轻型的数据库,遵守 ACID 的关联式数据库管理系统,它包含在一个相对小的 C 库中。它是 D.RichardHipp 建立的公有领域项目。不像常见的客户-服务器范例,SQLite 引擎不是建立程序来和引擎通信的独立进程,而是一个主要组成部分来连接到程序。所以主要的通信协议直接调用编程语言内的 API。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、

19、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。特点:1. 支持数据库事务2. 无需配置:不安装和管理配置也能使用3. 信息被存储在单个磁盘文件中,而且整个数据是存储在完整的数据库中。64. 数据库文件可以在不同字节顺序的机器间自由共享。5. 数据库大小最多支持到 2TB 大小。6. 该数据库包含 130 万行 C 代码大约 4.43M。7. 相对于目前流行的数据库做一般的数据库 curd 操作要快。8. 数据库的操作十分简单,API 简单易懂。9. 源代码的注解十分详细, 测试覆盖率达到 90%以上。10. 独立性:

20、 无需依靠其他依赖就可使用。11. 代码开源,用户可以将源代码用到任何场所。12. 支持多种语言开发程序,例如 C 语言, C+, Java, Python 等主流语言。2.3 eclipse 简介Eclipse 是有 IBM 开发的著名的跨多平台的自由集成开发环境软件(IDE)。最初软件开发用做 Java 语言开发,现在也可以通过添加插件使其成为其他计算机语言的开发工具例如 C+和 Python。Eclipse 的插件机制的建筑风格是轻量级的软件组件。在客户机平台上, Eclipse 使用插件添加所有的附加功能,如 Java 之外的其他编程语言的支持。该插件已经被分离,支持 C / C +

21、(CDT)、数据库开发等多种用途和语言开发。插件架构可以支持任何延伸到现有的开发环境,例如配置管理,这并不限定于支持各种编程语言。一切都是插件是 Eclipse 的设计思路。 Eclipse 的核心并不大,除了 java 开发,其它所有功能,都把插件添加到 Eclipse 的核心中。 Eclipse 的基本核心包括:图形 API (SWT / JFace 的) , Java 开发环境插件( JDT) ,插件开发环境( PDE )等。7第三章 系统需求与分析3.1 系统功能需求.1 用户认证用户认证用户认证模块针对所有用户,用户连接程序进行身份认证,通过认证后,程序知道用户身份,

22、就可以提供针对性的体验。1. 密码的安全性,运用计算密码散列值来实现对密码的保护。2. 使用蓝本实现不同界面的跳转功能。3. 用户登录后,认证状态被 Flask-Login 记录下来,管理用户认证系统中的认证状态。4. 新用户想成为成为其中的一员,必须在博客系统中注册,根据博客系统的需求,用户分为 3 个角色:用户、言论管理员、管理员。1) 用户的主要功能用户的用例图如图 3-1 所示。用户博博客客系系统统注册信息管理博客文章管理个人资料管理关注博主图 3-1 博客系统用户用例图 账号操作:注册账号,设置认证邮箱和密码,并且具有修改自己邮箱账号和密码。 修改个人资料:编辑作者的姓名,位置等信息

23、。8 发布博文:用户可以随性所欲的发表自己的想法和理念。 修改博文:用户可以修改自己发布的文章。 关注博主:关注其他用户,在指定一栏中显示关注者的文章。 查看个人资料:点击用户,链接到作者的用户资料界面。 2) 言论管理员的功能言论管理员的用例图如图 3-2 所示。言论管理员博博客客系系统统注册信息管理博客文章管理个人资料管理关注博主言论管理图 3-2 博客系统言论管理员用例图 言论管理员拥有普通用户的权限,并且具有言论管理的权限。如果有用户使用了不正当的言论,管理员可以将评论给屏蔽掉。9 3) 管理员的功能管理员的用例图如图 3-3 所示。管理员博博客客系系统统注册信息管理博客文章管理个人资

24、料管理关注博主言论管理用户管理图 3-3 博客系统管理员用例图管理员拥有言论管理员的权限,还有修改所有用户的用户组和用户资料。5. 用户可以管理自己账号,修改个人资料和邮箱地址和密码。.2 用户角色用户角色 程序对于角色赋予了不同的权限。所有用户的权限总共一下几种操作:关注用户,在他人的博文中发表评论,编写博文,管理别人发表的评论,管理权限。角色分为 4 种:1. 匿名游客在系统中只有阅读权限。2. 用户编辑并发表文章、发表自己的言论、关注他人、查看他人信息的权限。3. 言论管理员 审查那些不当的言论的权限。4. 管理员 拥有所有的权限,并且包括修改所有注册用户的角色的权限。3

25、. 用户资料用户资料网络社交中往往会有提供给用户的资料页面,只要用来了解到作者的个人信息10和兴趣爱好。用户可以把自己资料的 URL 分享给其他人,这样别人能更方便的了解作者。用户资料中有用户姓名、用户所在位置、关于用户的信息、加入博客系统时间等信息。用户可以编辑自己的资料,但只是编辑一些基本的资料。管理员则在编辑用户时会有编辑用户角色的权限,修改用户的权限资料。在编辑上要创建两个不一样的表单。用户的头像使用的是其他网站上的图片。使用 Gravatar 提供的头像。用户只需在网站上绑定自己的邮箱和头像图片,就能使得在博客系统中显示同样的头像。.4 博文管理博文管

26、理博客系统中允许用户阅读文章,撰写博文。用户不仅可以读取关注的作者博文,还要能自己 发表博文。如果对博文不满意的地方还可以进行修改。对所看的博文有不同意见或者赞同的话也可以评论进行交流。管理员可以直接修改博文,并且可以屏蔽掉不当的言论。编写博文时,会用到一些标题、引用等特殊格式,所以在编辑博文的时候用到Markdown 的语法,简单方便的将文章进行标准化。113.2 开发环境需求1、 硬件要求 既为终端又为服务器的一台计算机pc 机属性:CPU:i5 2.0G Hz内存 4G 硬盘:1T2、 软件要求Windows7 操作系统SQLite 数据库Eclipse Mars.2 Release 开

27、发工具Python2.7 库Chrome 浏览器12第四章 系统设计4.1 系统功能设计1、认证管理,如图 4-1 所示。用户认证用户言论管理员管理员注册邮箱、密码修改注册邮箱、密码注册邮箱、密码修改注册邮箱、密码注册邮箱、密码修改所有注册邮箱、密码图 4-1 用户认证图游客访问博客系统时,只能查看一些博文和博主的简单资料,如果要进行深入了解还需注册账户。在注册账户的时候,要求用户提交常用电子邮箱账号和本系统中的用户名及密码。在注册时对邮箱和用户名进行正则校验,不符合条件的无法注册。注册成功后,系统通过 SMTP 邮箱服务器发送一封确认邮件,收到邮件后单击URL 链接后才可以登录博客系统。或者

28、管理员可以在资料中,修改用户的确认状态。用户还可修改自己的邮箱地址和博客系统密码。修改邮箱时也需进行邮件确认。132、个人资料管理,如图 4-2 所示。个人资料管理用户言论管理员管理员查看所有用户的个人资料修改自己的个人资料查看所有用户的个人资料修改自己的个人资料查看所有用户的个人资料修改所有人的个人资料和角色等图 4-2 个人资料管理模块图用户在注册账户后会提交一些个人资料,这些资料用于博友之间的互相了解。用户登录博客系统后可以对自己的个人资料进行管理。点击主页面的个人资料链接,首先显示的是用户自己的资料。单击编辑资料按钮,将数据库中的数据加载到表单中。编辑用户资料分为两种情况。显而易见,第

29、一种情况用户进入一个页面编辑自己的资料。还有一种是管理员的操作,单击编辑资料可以加载 User 模型中的字段,例如用户角色。这两个编辑功能有本质上的区别,所以在设计的时候要创建两种不一样的表单来进行资料修改。用户级别的编辑资料只加载用户的姓名、位置、相关信息 3 个字段,提交不需要对信息进行校验。而管理员的编辑资料就显得复杂一些,管理员还需编辑用户的电子邮件、用户名、确认状态和角色。邮箱和用户名在提交时要进行正则匹配,如果不符合要求,则不通过验证。143、博客管理,如图 4-3 所示。博客文章管理用户言论管理员管理员查看所有文章编写自己的博客文章修改自己的博客文章查看所有文章编写自己的博客文章

30、修改自己的博客文章查看所有文章编写自己的博客文章修改所有作者的博客文章图 4-3 博客文章管理图用户在使用博客系统时,只要就是享受查看博客和编写博客的乐趣。所以博客管理是比较重要的模块。博文拥有编号、正文、时间戳和作者编号这几个字段。程序首页就有编写博文的表单。如果角色拥有写文章的权限,则会显示编辑博客文章的表单。如果是游客访问的话,写文章的表单不会显示出来。博客文章主页显示的每一条博文都有博主的用户名、头像、发布时间和博客文章。可以点击上面的超链接,访问其他页面。如果发布的是短消息或者只是更新近期的状态,纯文本格式的就已经足够了。但是如果发布博客文章的话就在格式上被限制住了。所以引入 Mar

31、kdown 的语法来给文章添加一些格式。运用 pagedown 模块,调用 JavaScript 实现 Markdown 的转换,能够在表单的下方进行预览。提交时,只提交表单中的 Markdown 源文本。154、关注与评论,如图 4-4 所示。关注功能与评论博客文章功能用户言论管理员管理员关注自己欣赏的作者评论博客文章关注自己欣赏的作者评论博客文章评论博客文章关注自己欣赏的作者评论博客文章评论博客文章图 4-4 关注作者与评论功能图在程序中有一层关系叫做关注者与被关注者。这个功能用来在主页中一个页签中显示所有关注者的文章包括自己的。数据库中运用 follows 表来记录关注问题。所以在显示已

32、关注者的页签时,使用表的联查来获取所有关联的博客文章。如果想取消用户之间的联系,可以单击取消关注按钮,通过数据库中记录的删除来实现。个人资料中还可点击粉丝来查看关注自己的用户信息,关注按钮则是跳转到用户自己关注的作者的信息界面。用户具有对博客系统中文章评论的权限,但是拥有评论的权限也必须履行言论正当的义务。当用户使用不恰当的言行时,言论管理员可以将改评论置为不可见,理论上不从数据库中删除。超级管理员不仅可以编辑已发布的博客文章,还可以管理用户的评论,也是将评论置为不可见。164.2 数据库设计在博客系统中涉及到很多用户之间的交互,良好的边间关系显得尤为重要。系统中总共 6 个表,分别为版本表

33、version、评论表 comments、关注表 follows、博客文章表 posts、角色表 roles、用户表 users。版本表在本系统中作用不大,只是为了以后的功能扩展做铺垫。系统中数据库表关系如图 4-5 所示。usersP PK Ki id d username role_id email confirmed about_me last_seen location member_since name avatar_hashrolesP PK Ki id d name default permissionspostsP PK Ki id d body timestamp autho

34、r_id body_htmlfollowsP PK Kf fo ol ll lo ow we er r_ _i id dP PK Kf fo ol ll lo ow we ed d_ _i id d timestampcommentsP PK Ki id d body body_html timestamp disable author_id post_id图 4-5 表间关系图1、角色表 roles 中,存储的是用户的 3 种角色。各个字段如下图表 4-1 所示。字段名类型长度默认值字段说明idinteger0PK 主键namevarchar64用户名 UNIQUEdefaultboolea

35、n0默认为用户permissionsinteger0用户权限值表 4-1 角色表17每一个用户注册,id 自动加 1,用户名和数据库中的用户名进行比较,没有相同的则可以申请。注册账号时,博客系统默认使用者为用户,所以只有普通用户的default 字段为 true,普通用户、言论管理员、管理员的权限值分别为7、15、255。2、用户表 users 如图 4-2。字段名类型长度默认值字段说明idinteger用户编号 PKusernamevarchar64用户名role_idinteger用户角色编号emailvarchar64用户邮箱地址password_hashvarchar128密码哈希散列

36、值confiremedboolean邮箱是否确认about_metext关于作者资料last_seendatetime上次登录时间locationvarchar64位置member_sincedatetime加入博客系统的时间戳namevarchar64用户姓名avatar_hashvarchar32邮箱散列值表 4-2 用户表用户表中用户 id 作为主键,用户名不可重复。role_id 为 roles 表中的 id,作为此表中的外键,用来确定用户属于那种角色。邮箱地址、加入系统的时间都是在注册的时候就填写的。密码的哈希散列值则是通过输入的密码进行转化得来,邮箱散列值也是如此。3、关注表 fo

37、llows 如表 4-3 所示。字段名类型长度默认值字段说明follower_idinteger关注者 idfollowed_idinterger被关注者 idtimestampdatetime时间戳表 4-3 关注表关注表中关注者 id 和被关注者的 id 联合起来作为主键,这样防止关系的重复。用户在关注其他用户的时候,单击关注时会产生一个时间戳一起写到数据库中。4、博客文章表 posts 如表 4-4 所示。字段名类型长度默认值字段说明idinteger博文编号bodytext博文主体18timestampdatetime时间戳author_idinteger作者 idbody_htmlt

38、extMarkdown 语法的博文表 4-4 博客文章表博客文章表中,body 字段为用户发表博文的原始字段,经过 Markdown 的语法处理之后转化成 html 语法存储在 body_html 字段中。同样在编辑的时候,会产生一个时间戳和作者 id 来标示博客文章。5、评论表 comments 如 4-5 所示。字段名类型长度默认值字段说明IdInteger评论编号BodyText评论主体Body_htmlText评论主体 htmlTimestampDatetime时间戳DisableBoolean是否显示Author_idInteger评论人编号Post_idinteger博文编号表 4

39、-5 评论表评论时和发布博客文章一样,评论的主体会经过 Markdown 语法进行翻译,存储到 body_html 中去。在评论中,支持的语法相对较少,防止和博文一样复杂化。评论会和评论者的编号和所评论的博客文章编号进行关联。19第五章 系统功能模块实现系统功能模块的实现是对系统设计基础上的进行模块的编码,为源代码提供说明。所有 Flask 框架的程序都要创建一个程序实例。Web 服务器使用 Web 服务器网关接口协议,把来自客户端的请求传送给程序实例。程序实例要求知道每个 URL 对应的代码,处理函数与 URL 的关系代码成为路由。程序实例运用 run 方法来启动Flask 集成开发的服务器

40、。如果使用调试模式时,将 app.run()函数中的参数设置为 true。数据库连接使用 Flask-SQLAlchemy 库。SQLite 数据库不需要使用服务器,所以不用指定 hostname、username、和 password。程序使用的数据库 URL 必须保存在 Flask 配置对象的 SQLALCHEMY_DATABASE_URI 中。初始化并配置 SQLite 数据库代码如下。from flask.ext.sqlalchemy inport SQLAlchemybasedir = os.path.abspath(os.path.dirname(_file_)app = Flas

41、k(_name_)app.configSQLALCHEMY_DATABASE_URI = sqlite:/+os.path.join(basedir,data-dev.sqlite)app.configSQLALCHEMY_COMMIT_ON_TERDOWN = truedb = SQLAlchemy(app)5.1 注册及用户认证.1 用户注册用户注册在博客系统中,用户只有在登录的情况下才能评论博客、关注作者,所以使用者必须先注册账号。在注册时的流程图 5-1 如下。20开始填写邮箱用户名填写是否符合标准、邮箱用户名是否未被占用N设置密码Y校验两次密码是否输入一致YN跳转到登

42、陆界面结束图 5-1 用户注册流程图注册账号主要代码如下。class RegistrationForm(Form): email = StringField(u邮箱账号 , validators=Required(), Length(1, 64), Email() username = StringField(u用户名, validators= Required(), Length(1, 64), Regexp(A-Za-zA-Za-z0-9_.*$, 0,Usernames must have only letters,numbers, dots or underscores) passwo

43、rd = PasswordField(u密码, validators= Required(), EqualTo(password2, message=u密码必须一致! ) password2 = PasswordField(u确认密码 , validators=Required() submit = SubmitField(u注册)主要对用户名和邮箱进行了正规化的校验,并且确认用户注册时用户名和邮箱账号不能重复。.2 用户认证用户认证用户在首次登录时,必须你打开确认邮件,才可按不同角色跳转到不同的界面中。流程如下图 5-2 所示。开始用户提交注册信息后登录,发送确认邮件确认

44、是否确认N跳转到主页面Y是否为用户是否为言论管理员N跳转到用户主页面Y跳转到言论管理员主页面Y跳转到管理员界面N结束图 5-2 用户登录流程图对于游客,博客系统只显示所有的文章,发表评论和发表博客文章的表单将隐藏起来。所以在注册后,用户登录会跳转到不同的界面,普通用户可以发表博客文章和评论,并且只可以修改自己的文章。而管理员则可以修改任何人的文章,当然也可以发表自己的博客文章和评论。5.2 用户资料用户在登录后可以修改自己的用户资料。包括修改自己的邮箱地址、密码、姓名、位置、以及个人简介。其流程如下图 5-3 所示。22开始修改个人信息当前角色是否未管理员修改邮箱、密码等基本信息Y修改基本信息

45、以及用户名、角色类型N结束图 5-3 修改个人信息流程图系统使用者在点击编辑资料时,根据上述的流程图中,首先判断使用者的身份。若使用者为用户时,界面如图 5-4。图 5-4 用户编辑个人资料图23而当使用者为管理员时,界面如图 5-5。图 5-5 管理员编辑个人资料图管理人员可以编辑用户的基本信息,还可以编辑用户自己不可编辑的字段,比如:用户名、角色、是否确认这三项,并且在修改邮箱的时候也不需要对邮箱发送确认邮件了。5.3 博客文章此模块的用户是所有登陆的用户、言论管理员、管理员,游客不能发表任何文章。撰写博客文章时,可以使用 Markdown 的语法来将文章格式化。博客系统的首页要显示一个表

46、单,以便于用户撰写博客文章。表单很简单,只有一个文本输入框,用户输入博客文章。在输入的同时,会运行 JavaScript 及时将博客文章转化成 html语言,显示在预览框中。24由于博客系统的用户不会只限制于几个,所以在展示博客文章的时候要用到分页。使用分页时要使用很多的数据。博客系统中使用 ForgeryPy 库来进行自动化生成数据。将数据添加到 User 模型和 Post 模型中,生成虚拟数据。核心代码如下。def generate_fake(count=100): from sqlalchemy.exc import IntegrityError from random import s

47、eed import forgery_py seed() for i in range(count): u = User(email=forgery_ernet.email_address(), username=forgery_ernet.user_name(True), password=forgery_py.lorem_ipsum.word(), confirmed=True, name=forgery_.full_name(), location=forgery_py.address.city(), about_me=forgery_py.lore

48、m_ipsum.sentence(), member_since=forgery_py.date.date(True) db.session.add(u) try: mit() except IntegrityError: db.session.rollback()上述为 User 模型数据的自动化生成,Post 模型的数据也是这个原理。当博客文章满足一定条件后,页面的渲染只会显示有限数量的文章,如果要想访问其他页数的博客文章需要在浏览器地址栏中加上 URL 进行查询。在 Flask-SQLAlchemy 中 paginate()方法中定义每页显示的数量,默认值为 20 条记录。分页导航是以

49、Jinja2 宏来实现,这个宏以 Bootstarp 的分页元素定义。如果当前页数为 1,“上一页”链接则置为不可用。同样,当当前页为最后一页,“下一页”按钮也将会置为不可用。分页对象迭代器返回的所有页面链接,被渲染成有页数的链接,显示时使用 activeCSS 类高亮显示。每一篇博客文章应该有一页专页,引用唯一的 URL,便于向社交网络中分享自己的文章。只要代码如下:main.route(/post/, methods=GET, POST)def post(id): post = Post.query.get_or_404(id) form = CommentForm()只允许博客文章的作者

50、进行编辑文章时,要用到视图函数。但是管理员可以修改任何一个人的博客文章。如果普通用户尝试编辑其他用户的文章时,视图函数会25返回错误代码 403。实现方式:def edit(id): post = Post.query.get_or_404(id) if current_user != post.author and not current_user.can(Permission.ADMINISTER): abort(403) form = PostForm()为了完善功能,在每一条博客文章的右下角有 3 个按钮。分别链接到编辑博客文章界面、文章的 URL、评论界面。为了区别和普通用户的编辑,

51、在编辑按钮上的样式使用了不同的样式来区分角色。5.4 关注作者在数据库中使用表来创建用户之间的关系。数据库关注表中总共 3 个字段,关注者 id、被关注者 id、关注时间。当关注者 id 和被关注者 id 相同时,这层关系叫做自引用关系。关注者 id、被关注者 id 都是表的外键,与用户表的数据对应。关注者和被关注者又形成了关注表的主键。在点击作者用户名后,页面跳转到用户资料界面。点击关注按钮后,按钮变成取消关注,同时改作者的资料中显示粉丝人数少了一名。如下图 5-6 所示。图 5-6 个人资料界面图程序中使用 follow()方法将实例创建,插入到 follow 表中,从而把关注者和被关注者

52、关联起来,连接在一起的两名用户被传到 follow 类的构造器中,创建一26个 Follow 的新实例,并且将实例对象添加到数据会话中。在创建的同时,要系统会生成一个时间戳,即当前时间,一起添加到数据库中。取消关注时,使用unfollow()方法找到关注者和被关注者的连接关系,删除这个 Follow 对象就能实现。在关注成功后,目的是把所有关注的作者的文章集中到一个界面中来显示。这时候使用数据库的联查来实现。想要显示所有的关注作者的文章,第一步先获取这些用户信息,然后通过表的中 id 获取各个用户的文章,通过文章生成时的时间戳来进行排序,单独写到一个列表中。但是这种操作方式可伸缩性差,随着数据

53、库中数据的不断增长,列表工作量也会增长,无法保持高效率的执行。这时候需要使用联结操作。当查询的时候查找满足条件的记录组合,再把记录写入到一个临时表中,这就是联结查询所得到的结果。5.5 评论管理用户在登录博客系统中有发表评论的功能,而评论和博客文章本质上没有什么区别。都是使用了 Markdown 的语法。评论是属于某一篇博客文章的,所以定义了一个关系,从 posts 表与 comments 表形成一对多的关系。使用这层关系,可以获取到特性一篇文章的所有评论。在博客系统中,评论要显示在对应的单片博客文章中。点击博客文章界面上的编辑按钮,界面就跳转到评论的链接,一个能提交评论信息的表单也要在此界面

54、中。这个表单相对其他表单来说,比较简单,只有一个字段和按钮。评论按照时间戳进行排序,先评论的显示在最前面。评论也使用了与博客文章相同的技术来实现分页效果。评论的渲染过程在模板_comments.html 中,类似于_posts.html,使用的 css 样式却不同。评论要显示在文章的正下方,然后在显示分页导航栏。博客文章页面中有显示文章的评论数量,评论数量是使用的 SQLAlchemy提供的 count()方法来进行计数。管理评论时,有两种角色有权限,分别为言论管理员和管理员。他们用户的权限为 permission.moderate_connemts,拥有此权限可以对博客系统中的任意一条评论进

55、行管理。管理界面中,在列表显示全部用户的评论记录,按照发布的时间最近开始排序。每一篇博客文章右下角都有一个 disabled 按钮,点击按钮,评论将视27为不可见。但是在视图中,对于普通用户来说,不显示标记有问题的评论。对于言论管理员来说,不管是否被标记为有问题,都要显示出用户评论的内容。评论路由定义如下:main.route(/moderate/enable/)login_requiredpermission_required(Permission.MODERATE_COMMENTS)def moderate_enable(id): comment = Comment.query.get_o

56、r_404(id) comment.disabled = False db.session.add(comment) return redirect(url_for(.moderate, page=request.args.get(page, 1, type=int)main.route(/moderate/disable/)login_requiredpermission_required(Permission.MODERATE_COMMENTS)def moderate_disable(id): comment = Comment.query.get_or_404(id) comment.

57、disabled = True db.session.add(comment) return redirect(url_for(.moderate, page=request.args.get(page, 1, type=int)28第六章 系统测试6.1 测试环境1. 装有 windows7 系统的 pc 机。Python 程序理论上可以在多个平台上运行,可以在 windows 或者 linux 上都可以运行。由于在 windows 系统中开发的,所以直接用同了一个系统。2. 安装 Python。如果没有安装 Python 安装包,就相当于没有安装 JDK 运行 Java 代码。安装Pyth

58、on 后,还要使用 pip 命令安装一些程序必须要引用的库,例如 flask 的一系列库。3. 浏览器 chrome。浏览器是 web 应用性能检测的重要工具。根据浏览器的测试页面的结果,进行针对性的优化。6.2 测试目的软件开发的最基本的要求是时间和质量。而软件测试是软件质量保证的最重要的手段之一。对于软件来说,无论采用什么技术和方法进行开发,产品都会有bug。采用比较全面的技术测试可以减少错误的存在,提高软件的运行时的稳定性。在整个软件的生命周期中,每个阶段、每个时间都存在软件测试活动,软件测试伴随着软件开发,检验每个阶段的成果是否符合质量要求并且达到预期的目的,尽早的发现并且改正程序中的

59、错误。 编写单元测试的主要目的有两个,一是能够确保新添加的代码按照预期的方式运行。二是每次修改程序后,运行单元测试能保证现有的代码功能依旧能用。6.3 测试内容1、登陆功能模块:1)用户用注册过的邮箱账号可密码进行登陆,是否能验证成功,并且跳转到29主页面;2)用户在点击注册账号时,填写资料是否能够检查出唯一性;3)注册账号时,系统是否能够发送确认邮件到用户提供的邮箱中;4)登陆成功后,用户点击修改邮箱账号,系统是否会发送邮箱到目标邮箱;5)登陆成功后,用户修改密码是否能成功。 2、博客文章功能管理模块:1)游客访问时,能否发表博客文章;2)普通用户登录后,能否发布博客文章;3)普通用户登录后

60、,能否使用 Markdown 的语法来将文章内容富文本化;4)普通用户登录后,能否将自己已经发布的文章进行修改;5)言论管理员登录后,能否像普通用户一样进行博客文章的发布和编辑;6)言论管理员登陆后,能否修改普通用户所发布的博客文章;7)管理员登录后,能否像普通用户一样进行博客文章的发布和编辑;8)管理员登录后,能否编辑所有用户的博客文章3、个人资料模块:1)游客访问时,点击用户用户名的链接,界面是否能跳转成功;2)普通用户登录后,点击自己的用户名,是否能跳转到自己的信息界面,点击编辑资料后,是否能跳转到编辑个人资料的界面,提交后,用户资料是否提交到数据库中;3)点击用户名的链接,是否能看到用

温馨提示

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

评论

0/150

提交评论