系统基于 Flask 框架,目前实现的功能主要包括注册、登陆、发表文章、文章删除、点赞、评论与回复评论、验证码。
模块:公众号模块和普通用户模块,用户模块只能点赞、评论、浏览,公众号模块可以有全部功能。
因为自己跨专业,基础太弱,不太会开发,需要一些系统性学习。所以主要展开了以下的工作:跟着网课敲代码,实现一些基本的功能;自己尝试实现一些功能点;根据课上所学,研究该项目用到了什么中间件,展开介绍,如下图所示:
注:“跟学网课”的部分是网课现成的;“实现功能点”这部分是自己写的几个函数;“中间件介绍”是结合课程所讲进行的分析,也是该报告的重点。

先安装相关的包,具体在 requirements.txt 中,使用 Python3.6 版本运行。本地运行,打开系统后,单击此处:

可以在 http://127.0.0.1/查看系统。
注册,注册分为普通用户和公众号注册,代码如下:


基本的注释已经写在代码中,再提一句的是头像图片不能大于 1MB,一个邮箱只能注册一个账号。
登陆,对应代码在 index.py 中 247-259 行,比较简单,不去赘述。
发表文章,特殊说明的是,如果没有摘要,会自动提取文章前 60 个字符作为摘要。

文章删除,这里要先核实是不是作者本人,再就是 likequery.is_del 是进行逻辑删除,避免很多麻烦。

点赞,对应代码在 index.py 中 102-115 行,比较简单,不去赘述。
评论与回复评论,评论要核实是否登陆以及验证码是否正确,回复评论是公众号用户特有的功能,所以要核实是不是作者。代码在 index.py 中 137-184 行,比较长,就不截图了。
数据库,数据存储在本地的 MySQL 数据库中,截图如下:

验证码与评论,代码在 index.py 中 344-393 行。需要填写验证码才能进行评论,确保评论是人进行的操作。把评论和验证码结合了起来,但是这样每一次评论会很麻烦,同学建议直接在登陆的时候填写验证码就可以。

验证码实现主要包括以下步骤:选择颜色,数学运算,创建 Draw 对象,填充元素,输出文字。
中间件定义:
Flask-session:
session 可以看做是在不同的请求之间保存数据的方法,因为 HTTP 是无状态的协议,但是在业务应用上我们希望知道不同请求是否是同一个人发起的。
原理:
当客户端进行第一次请求时,客户端的 HTTP request(cookie 为空)到服务端,服务端创建 session,视图函数根据 form 表单填写 session,请求结束时,session 内容填写入 response 的 cookie 中并返回给客户端,客户端的 cookie 中便保存了用户的数据。

当同一客户端再次请求时, 客户端的 HTTP request 中 cookie 已经携带数据,视图函数根据 cookie 中值做相应操作(如已经携带用户名和密码就可以直接登陆)。
代码实现:
该系统通过用户访问 POST /login 来实现登陆,如下图所示:

存储与删除:
用户登陆的信息在本地的存储如下:

session 中的值可以通过以下三种方式删除:
-`session.pop(key)`。
-`del session[key]`。
-`session.clear()`:删除session中所有的值。
定义:
SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架。他的作用就是能将数据库里面的实体类数据表映射成 python 里面的实体类,与 Django 的 ORM 框架各有优缺点。
SQLAlchemy 对象关系映射器提供了一种方法,用于将用户定义的 Python 类与数据库表相关联,并将这些类(对象)的实例与其对应表中的行相关联。它包括一个透明地同步对象及其相关行之间状态的所有变化的系统,称为工作单元,以及根据用户定义的类及其定义的彼此之间的关系表达数据库查询的系统。
ORM:一般指对象关系映射。
架构:
架构图如下图所示,其中 Schema/Types 定义了类到表之间的映射框架(规则),SQL Expression Language 封装好 SQL 语句,Engine 是操作者,Connection Pooling 是连接池,Dialect 根据用户的配置,调用不同的数据库 API(Oracle, postgresql, Mysql) 并执行对应的 SQL 语句。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1lqqiEqS-1658731070050)(https://www.writebug.com/myres/static/uploads/2022/7/24/4f0ffdc47c0eaa278a52a39f8fd33a18.writebug)]
代码实现:
安装,略。连接数据库,初始化,如下图:

添加记录操作:

查询操作:

删除、更新操作类似,在此不赘述。
创建表,主要创建的表有三张:用户表,文章表,评论表。以评论表为例,建表需要用到的属性,以及效果如下图所示:
创建表:

数据库中存储评论的内容:
