第 1 章 绪论
1.1 选题背景与意义
当人们想要记录个人生活点滴、想传达个人自由思想、想抒发与分享个人情绪、想分享与交流知识和技术、想认识同好、结交朋友或者是想要分享个人作品的时候,可以分别选择写日记或者发微博朋友圈等等,但兼具以上功能的,博客是一个比较好的选择。有些博客作者专注编写特定的领域文章,有些则把博客作为个人日记。博客结合了文字、图片、超链接以及其他相关的媒体,同时能够让读者评论并且相互间交流。同时博客也是社会媒体网络的一部分。这些特性让博客在偌大的互联网中逐渐占据一片江山。
1.2 发展状况
随着互联网的快速发展,兼具发表、记录、讨论和交流特性的博客,一度风靡整个互联网。博客记录文字,是知识的载体。但是在2005年前后几年兴起更多是因为它的社交属性。博客更加适合作为一个塑造个人品牌和影响力、经营自己独立观点、沉淀知识素养最佳的平台。从这方面说,因为社交而流行,是一种互联网泡沫。随着微博和朋友圈的崛起,分别瓜分了陌生人社交与熟人社交的用户。博客因此不再火爆,同时各大博客平台在自家平台上推广自家其他产品和推送广告。用户由此心生厌倦,更是加大了博客看衰败的进度。尽管表面上,现今的博客不能和黄金时期相提并论,但博客却因此回归到作为知识的载体的角。在今天,仍然有很大一部分人坚持使用博客并且不断产出高质量内容,因此博客平台仍然值得研究。
1.3 本文的研究内容与主要工作
本文所设计和实现的多人博客平台,是一个多用户的博客系统;是着力于为需要记录文字和知识的用户建立一个新的博客平台,并且为整个平台提供一个统一管理的后台管理系统。
本文的多人博客平台系统采用了三层结构(表现层、逻辑层、数据层)。其中表现层使用了HTML、CSS、JavaSCript、Bootstrap框架技术和Jinja2模板引擎。逻辑层中,开发语言采用Python3,Web框架采用Flask及其一些第三方的插件;数据层中,选用MySQL作为数据库,另外使用Flask-SQLAlchemy提供访问和操作数据库的接口。
1.4 本文的论文结构与章节安排
本文的组织结构如下:
第一章 绪论。介绍了本文的项目背景、发展状况和本文的主要工作和组织结构。
第二章 相关技术综述。介绍了Python3、Flask框架、Bootstrap3框架、SQLAlchemy数据库中间件和模板引擎Jinja2.
第三章 多人博客平台的需求分析。详细分析了本文的网站的需求。
第四章 多人博客平台的设计。对本文的需求进行详细设计。
第五章 多人博客平台的实现。对本文进行具体实现。
第六章 总结与展望。总结工作,并且对博客平台
以后的发展作下一步展望。
第 2 章 相关技术综述
本章粗略叙述了Python3、Flask框架、Bootstrap框架、SQLAlchemy、模板引擎Jinja2和Gunicorn服务器这六个与本课题密切相关的技术详情。
2.1 Python3
Python是一种面向对象、解释型、动态数据类型的计算机高级程序语言。该语言的作者Guido van Rossum在1991年公开了第一个Python发行版。
Python的推行"simple is better than complex."的设计理念。与其他语言的一大区别是,Python使用缩进区分代码块,而不是使用大括号等标记符。这使得Python的代码布局十分清晰,有利于多人协同开发。
Python是一门开放性很强的语言,本身内置了很多功能强大的标准模块,同时也有着十分庞大的扩展库。其中不只有官方在开发维护,更多的是世界各地中有许多活跃的社区和个人在开发、维护着这些扩展库。Python还提供了丰富的应用程序接口和工具,因此程序员能够使用C、C++等语言编写Python的扩充模块。以上以及其他种种原因使得Python是一门强大、优雅、易维护、用途广泛的语言。
与Python2相比,Python3带来了更多强大的语言特性。本文使用Python3(3.5.2)作为开发语言。由于Python与Python3不是完全兼容,处于过渡期的Python演化出两个通用的版本。但是目前官方已经发表声明,官方将全力开发Python3,而Python2不会再有新版本,并且将会在2020年停止维护。目前大部分的 Python库已经迁移到Python3上。由此可见,在本文中使用Python3是一个更为合理、顺应该语言发展趋势的选择。
2.2 Flask框架
在Python的各个Web框架中,Flask是比较轻量的一个WSGI应用框架,底层基于Werkzeug和Jinja2两个模块。Flask把自己称为“微框架”,因为它旨在保持核心简单且易于扩展。Flask不包含数据库层、表单层或者这个方向的其它东西,它只是建立了Werkezug 和 Jinja2 之间的桥梁,为开发Web应用提供一个良好的基础。可以说Flask提供了一个非常简单的胶水层,这正是Python
应该提供的东西,与Python的设计思想一脉相承。
Flask优点在于其简单、易于扩展的特性、松耦合的组件和出的反向路由设计。同样是Python的Web框架,Django提供了一站式的解决方案,除了Web框架,还自带了ORM和模板引擎。Django本身就拥有强大的功能,并且稳定可靠,经过多年的检验。目前来说,以上是Flask没有具备的。但和Django大包大揽不同的是,Flask建立于一系列的开源软件包之上,Flask更加自由、灵活、可扩展性强,能够结合其他强大的Python库。由此可见Flask与DJango的设计理念是完全不同的。本文选用Flask,是希望通过Flask深入浅出地了解如何使用Python开发Web应用。尽管Flask是一个比较新的和“微小”的框架,但它已经
有在实际生产环境中使用的能力,由此可见对Flask的研究具有实际意义。
2.3 Bootstrap3框架
Bootstrap是一款基于HTML5、CSS3和JavaScript开发的用于网站和网络应用程序的开源前端框架。框架作者Mark Otto和Jacob Thornton编写Bootsrtap的初衷是制作一套使动态网页和Web应用的开发更加容易的框架,设计了一套完善的、功能强大的、现代化的样式,提供了排版、表单、按钮、导航、和JavaScript扩展等许多已经设计好的工具,以便使用者调用。另外其优秀的栅格系统为以后扩展手机终端展示博客网站提供了有力的支持。
其中,Bootstrap目前有Bootstrap2、Bootstrap3和Bootstrap4三个主流版本,Bootstrap2有对ie比较低的
版本有更好的支持,但功能有所缺失;Bootstrap3不但能够满足本文需求而且是一个长期维护的稳定版本;Bootstrap4功能最强大,但目前只是发布了测试版本,没有正式发布稳定版本。经过权衡利弊后,本文决定使用Bootstrap3作为本文使用的网站前端框架。
本文主要研究方向是以Python为基础的Flask框架的多人博客平台,使用Bootstrap3框架搭建网站的可视化界面,能够达到快速展示使用Flask框架搭建博客平台实现功能的目。
2.4 SQLAlchemy数据库工具
对象关系映射(Object Relational Mapping,ORM)是一种解决面向对象编程与关系数据库交互不匹配的一种流行的技术,一般以中间件的形式连接程序和关系数据库,主要实现程序对象到关系型数据库数据的映射。
SQLalchemy数据库工具是使用Python实现的一款开源软件, SQLalchemy专门为访问高效率和高性能的数据库而设计,里面提供了SQL工具包以及对象关系映射(ORM)工具,实现了一套完整的企业级持久模型,给应用程序开发者操作数据库提供强大的功能和灵活性。
Flask-SQLalchemy扩展主要为了Flask应用增加SQLalchemy支持。它的实现主要为了在Flask中更加简洁方便地使用SQLalchemy。通过Flask-SQLachemy,Python开发者可以轻松地在Python中直接定义数据结构和操作数据库,降低开发成本。
2.5 模板引擎Jinja2
MVC软件架构模式把软件系统分为:模型(Model)、视图(View)和控制器(Controller),模板引擎在MVC中负责V(view)的部分。它作用是分离前后端代码,然后建立一个用户界面与业务数据交互的桥梁。其中用于网站设计的模板引擎会使用后端处理完的数据,生成一个符合规范的HTML格式的文档用于展示网站和与用户进行交互。
Jinja2是本文使用的Flask框架的默认模板引擎,完全支持Unicode字符编码,在Python3中,所有的字符串都是使用Unicode编码的字符序列。由于本文使用Python3进行开发,因此Jinja2十分适合在本文中使用。Jinja2的设计思想受到Python的另一个框架Django
的自带模板引擎的影响,另外增加了沙箱执行功能和强大的自动转义功能,使使用Jinja2模板引擎的网络应用更加安全。除此之外,Jinja2还有简洁易用的模板继承机制、高效的执行效率、可配置的语法和完善的帮助手册文档,为开发人员提供有力的支持。
尽管Flask可以选择其他模板引擎(如Flask-Genshi和Flask-Mako),但基于jinja2在Flask中出的发挥,本文选用jinja2作为多人博客平台的模板引擎。
2.6 Gunicorn应用服务器
Gunicorn是一个支持Python语言定义所定义的Web服务器网关接口(WSGI)的应用服务器。它基于自己的适配器原生支持多种符合WSGI规范的Web框架,能够把使用Python语言编写的Web项目方便地部署到服务器上面。相对于Python的另一个应用服务器uwsgi,Gunicorn部署简单,消耗的资源更加轻量,但性能相对差一点。Gunicorn支持HTTP/1.0协议和 HTTP/1.1协议,另外同时支持Python2和Python3,兼容性十分好。
2.7 本章小结
本章综述了在本课题中所应用的技术。首先介绍主要开发语言Python3以及使用其的原因。后端方面给出了使用Flask框架的原因,对Flask进行了介绍。前端方面介绍了Bootstrap框架。前端与后台交互方面,介绍了Jinja2模板引擎和SQLAlchemy数据库工具。最后介绍了本课题部署到服务器时所需要的应用服务器。
第 3 章 多人博客平台的需求分析
本章对多人博客平台的各项需求进行了分析,为进一步设计多人博客平台限定范围,扎实基础。
3.1 用户需求
整个用户系统主要分为2个需求:博文管理模块需求和用户管理模块需求。其中博文管理模块应提供三
个功能,分别是:
1) 可给自己和别人查看全部博文信息的展示页面;
2) 可查看某一篇博文详细信息并且点评此文章;
3) 发表文章。
用户管理模块包括:
1) 用户注册和登陆;
2) 查看用户基本资料;
因此,用户需要的功能如表3.1所示:
账号 注册
登录 / 退出
查看个人资料
修改个人资料
文章 查看文章
添加文章
修改文章
删除文章
评论 发表
回复
删除
博客为什么没人用了表3.1
3.2 后台管理人员需求
后台有4个模块,分别为用户管理、文章管理、后台管理和系统功能。其中用户管理模块可以操作用户
的所有资料。文章管理模块可以管理所有文章。后台管理模块可以添加或删除后台管理,控制各个管理者的权限。系统管理模块包括收发邮箱和查看管理账号资料。
综上所述,管理人员各项需求如表3.2所示:
用户管理 添加用户
修改用户资料
删除用户
文章管理 添加文章
修改文章
删除文章
评论管理
后台管理 权限组管理
管理者管理
赋予管理者权限
系统功能 收发邮箱
查看管理者资料
表3.2
3.3 本章小结
本章分三个方面着
重分析多人博客平台的需求,给出了本课题的研究范围,对系统的的需求给出了说明。
第 4 章 多人博客平台的设计
本章叙述了系统架构、数据结构和模板的详细设计,为接下来编写程序提供参照物。
4.1 系统架构
本文使用MVC的架构模式,把整个博客平台分为模型(Model)、视图(View)和控制器(Controller)三个基本部分。
其中模型通过使用SQLAlchemy的SQL数据库工具包实现对象关系映射(ORM)。本文使用Jinja2作为模板语言,通过标签把后端程序处理后的数据插入到模板文件上面。Flask使用了Python中的route装饰器实现了把一个函数绑定到对应的URL地址上的功能,控制器部分通过这个功能把每一个需要用到的URL和视图函数一一对应,并在视图函数中处理业务逻辑。具体流程是用户发起一个请求,后台响应这个请求通过Flask的route装饰器到视图函数,视图函数处理业务逻辑之后,把需要用到的数据通过Jinja2传到模板文件上,模板文件最终转化成HTML文件并响应到用户的浏览器上。
本文的博客平台把用户使用的客户端(前端)与网站管理者使用的客户端(后台)区分为两个Flask应用,两个应用之前代码隔离,并由Python3的Werkzeug统一管理。两个应用使用同一个数据库实现数据共用。
4.2 数据结构
本文使用MySQL来组织、储存和管理数据库。
根据第三章的需求分析,整个平台包括用户、博文、管理员和后台权限这5个模块需要格式化并存到数据库。
其中用户的数据表包括ID、账号、密码、邮箱、姓名、性比和简介这7个属性,对应到数据库如表4.2.1所示:
User ID
Account
Emal
Password
Sex
Name
Introduction
表4.2.1
博文的数据表包括标题、正文、上传时间、所属用户这4个属性,对应数到数据库中如表4.2.2所示:
Post ID
Title
Body
Pub_date
User_id
表4.2.2
管理员的数据表包括账号、密码和权限三个属性,对应到数据库如表4.2.4所示:
管理员 ID
Account
Password
Permission_id
表4.2.4
后台权限的数据表包括权限组名称和权限位两个属性,对应到数据库如表4.2.5所示:
后台权限 ID
Group
Value
表4.2.5
数据库表是一个二维表,包含多行多列,Python可以通过DB-API连接数据库,DB-API把一个表的内容用Python 的数据结构表示出来,具体实现是通过用一个列表(list)表示多行、列表里面的每一个元素是元组(tuple)。例如图4-2-1中表示一个包含id和name的user表:
图4-2-1
如果使用DB-API连接数据库,源代码将会是Python与MySQL语句同时混合使用,并且如上面例子所示,元组(tuple)表示一行也很难看出表的结构,对于后续维护不够友好。因此,本文的程序与数据库交互将通过SQLAlchemy连接。SQLAlchemy使用了Ob

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。