当前位置: 首页 > news >正文

基于python的博客系统设计与实现

摘要:目前,对于信息的获取是十分的重要,我们要做到的不是裹足不前,而是应该主动获取和共享给所有人。博客系统就能够实现信息获取与分享的功能,博主在发表文章后,互联网上的其他用户便可以看到,同时,博主也可以记录一些重要的信息等。在现在的软件产品的研发过程中,包含计划、分析、设计、实施和测试五个阶段,我们开发一个博客系统也是如此。一个完善的博客系统包含的功能也很多,对于不同的项目而言,侧重点可能不一样,对我们的系统而言,本系统主要实现单用户支持,实现基本的博客功能,如文章管理、评论管理、搜索等。本次系统采用Flask作为基础框架开发。主要分析了实现博客系统的相关技术。通过使用Python的Flask、Markdown、SQLAlchemy、Nginx、Redis和Mysql数据库等服务完成系统的设计与实现。本博客系统实现了游客浏览、填写相关参数后游客也可以发表评论,不过展示出来需要博主审核。博主除了可以发表文章,修改文章,删除文章等文章管理外,还可以审核用户评论、删除用户评论。本文主要对实现博客系统的相关技术,系统目标,系统的设计与实现进行介绍。

关键词:博客,Python,Flask,信息共享

Design and implementation of blog system based on Python

Abstract:At present, access to information is very important. What we should do is not to hold back, but to actively access and share it with all people. Blog system can achieve the function of information acquisition and sharing. After bloggers publish articles, other users on the Internet can see them. Meanwhile, bloggers can also record some important information. In the current software product development process, including planning, analysis, design, implementation and testing five stages, we develop a blog system is the same. A perfect blog system contains many functions. For different projects, the focus may be different. For our system, this system mainly realizes single user support and basic blog functions, such as article management, comment management, search, etc. This system uses flask as the basic framework. This paper mainly analyzes the related technologies of blog system. The system is designed and implemented by using the services of Python such as flask, markdown, Sqlalchemy, nginx, redis and MySQL database. This blog system enables visitors to browse and fill in relevant parameters, and then visitors can also comment, but it needs to be reviewed by the blogger. Bloggers can not only publish articles, modify articles, delete articles and other article management, but also review user comments and delete user comments. This paper mainly introduces the related technologies, system objectives, design and implementation of the blog system.

Keywords:blog,Python,Flask,information sharing

目 录

第1章

第1章 绪 论1

1.1个人博客研究的意义与背景1

1.1.1个人博客的发展背景1

1.1.2 本课题研究的目的与意义1

1.2 系统设计与与开发趋势2

1.2.1 系统设计思想2

1.2.2 发展趋势2

1.3 本文结构2

第2章 系统的相关技术介绍3

2.1 Flask简介3

2.2 Bootstrap简介3

2.3 MYSQL简介3

2.4 REDIS简介4

2.5 NGINX简介4

第3章 需求分析及可行性研究5

3.1 需求分析5

3.1.1系统目标5

3.1.2游客身份5

3.1.3管理员身份6

3.2可行性研究6

3.2.1 经济可行性7

3.2.2 技术的可行性7

第4章 系统总体设计8

4.1系统设计原则8

4.2系统功能设计8

4.2.1总体功能描述8

4.2.2功能模块设计9

4.2.2数据库设计10

4.3数据库设计概念10

4.3.1数据库逻辑结构设计10

4.3.2数据库物理设计11

第5章 主要功能的实现13

5.1后台登录13

5.2文章发表15

5.3用户评论17

5.4修改文章18

5.5评论审核20

5.6数据接口21

第6章 系统测试22

6.1系统测试的目的22

6.2系统测试的方法22

6.3系统测试用例22

第7章 总结与展望26

7.1博客系统的主要特点26

7.2系统的不足之处26

7.3前景展望27

参考文献:28

致谢29

第1章 绪 论

1.1个人博客研究的意义与背景

1.1.1个人博客的发展背景

在网络越发发达的现在,特别是在全球化的程序发展下,互联网已经是我们与外界交流的重要工具,而个人博客就是我们相互交流的一个重要的平台。这是互联网带给人们的变革的革命力量。互联网的发展拉近了我们与世界的距离,在给人们带来更多机会的同时,我们也要把我机会。大量甄别和获取信息。使我们不与世界脱轨。自由是个人博客的最大特征,也是博客精彩的原动力。个人博客的出现,也为人们深度交流和沟通的创造了新的网络方式。从特定的意义上来讲,它的出现和流行也是一种新的文化现象。 它的出现让人们的信息交流更加便捷,使人们工作与生活的方方面面都产生了翻天覆地的变化。

1.1.2 本课题研究的目的与意义

博客,也被称为网络日记。是一种由个人频繁更新,分享个人意见与心得、记录生活的方式。 个人博客通常是由一些简短并且经常经过更新的日志文章组成。比如可以是记忆力实在不好,所以选择记录下来。 博客的目的是在Internet上表达和发布您的各种想法,并向你展示当前的想法。随着时代的变迁和技术的发展,人们对知识的需求也越来越高,在各种网络交流方式的更迭中,博客由于自身的优越性,随着时代的发展而不断进步。博客现在在商业和个人展示等等方面都有了很大的发展。博客已经成为继论坛之后新的网络交流方式。希望博客给人们带来的更加便捷的交流平台,能使人们的生活更加便利,同时带动其他技术的发展。

1.2 系统设计与与开发趋势

1.2.1 系统设计思想

本博客系统在设计过程中,考虑到该系统一个是一个功能完备而小巧的系统,所以主要包含一下功能:发表文章、修改文章、输出文章、审核评论以及留言功能。在这些基础功能的基础上,再添加一下个性功能。如自定义链接等,本系统是针对个人的博客系统,因此它可以在上述介绍的博客系统必须具备的功能中适当精简,还应当如后面提到的,要有自己的特色。对于本系统,应做到简约展示内容。

1.2.2 发展趋势

过去几年来,随着网络的越来越发达,博客网站也在迅速发展。而博客的发展能改变我们的生活方式,改变我们查找资料和分享信息的方式。通过创建个人博客,我们可以在网络上拥有一块属于自己的地盘。也可以每天得到关注,其他人可以通过博客找到此人。 这样,随着时间的积累和推移,这通常被称为“个人声誉”。 个人的声誉是个人与互联网各种平台之间发展的各种关系的组合。 因此每个人的声誉也并不相同。 但是,如果为每个博客创建一种新的统一的评估审查机制,那么该机制或许将成为个人博客系统商业化的前提。

1.3 本文结构

本设计分为六个部分。首先介绍博客的历史以及现状,分析博客发展的方向。其次着重介绍本系统需要用到的相关技术。再对系统进行需求分析和可行性研究,阐述系统的可行性并确定系统的开发思想。第五部分实现系统的相关设计。第六部分对系统进行测试,验证稳定性。第七部分对博客系统的研究与设计工作进行总结,指出不足及解决方案,为以后优化打好基础。


第2章 系统的相关技术介绍

本博客系统的开发采用的是当下最流行的基于python的Flask框架,在该框架中,前端使用框架的模板引擎渲染。这样做的好处是,逻辑和前端展示分离可以方便以后维护,如果逻辑上有做修改,前端只需很少的改动,可以大大提高了系统的可复用性。在Python高开发效率的加持下,可以快速做出系统原型。

2.1 Flask简介

在python web框架的世界中,各种框架都在迅速发展,而flask便是其中之一。 Flask框架是集成了Jinja2的模板引擎的WSGI工具箱。 Flask仅有一个简单的核心,所以也被称为“微框架”。而其他功能可以通过拓展来添加。 比如Flask并默认不指定使用那种类型的数据库,没有表单的验证功能等等。正因如此,Flask保留了核心的高效性以及拓展的灵活性。 Flask的各种拓展可用于添加其他附加功能功能,如:ORM,邮件支持,表单验证工具,各种开放式身份验证技术等等。并且, Flask是采用BSD开源许可的。无需额外付费。

2.2 Bootstrap简介

Bootstrap是目前最受欢迎的前端组件库。它是推特公司开发并开源的js前端框架。主要的目的是用于快速开发和统一管理。它有效解决了传统框架在应用上的问题,如:传统框架一般都有命名复杂、样式冗余不规范、页面错乱不和谐等问题。在Bootstrap等一体化解决方案出现后,这些问题迎刃而解。Bootstrap 支持响应式布局,在最新版本中坚持以移动设备优先,可以很简便实现多设备多样式。Bootstrap一直是 GitHub 上热门的开源项目,广受各大公司推崇,包括NASA等知名网站都使用了该项目开发。

2.3 MYSQL简介

  1. 大量计算任务和数据,在以前只能通过人工计算,但随着技术的发展,计算机的算力提升使计算机成了大量计算最适合的工具。而计算机的发展衍生而来的数据库系统,便是是数据的结构化集合,它能使数据能被有效使用。是一种较为理想的数据处理机构。一般包括了对数据的插入、修改和检索。

  2. SQL是国际标准化组织制定的用于访问和处理数据库的标准的特殊的计算机语言。而MySQL就是一种支持SQL语言的跨平台的关系型数据库管理系统。在数据库中,数据以特定的结构组织、保存在不同的数据表中,这样在访问数据时,便可以大大提高访问速度。而且拓展极为方便。

  3. MySQL是一种开放源代码软件,我们可以随意浏览源代码。

  4. Mysql是一个真正的多用户、多线程数据库。这些特性使mysql的速度和可靠性并不比其他商业数据库系统差。由于多线程的支持,使得mysql可以充分利用CPU资源。在最新的版本中,mysql也支持了事务化处理,因此在一般的应用系统中。它是管理数据最好的选择。

  5. Mysql数据库是一个标准的C/S系统,提供TCP/IP、ODBC等多种连接途径,而且原生支持JSON。

2.4 REDIS简介

Redis是采用ANSI C语言编写的数据库。它的全称是Remote Dictionary Server,它是一直键对型数据库。

Redis也是一个开源软件,我们使用它不需要支付额外的费用。Redis的出现,很大程度上满足了关系型数据库在某些方面的不足。使用也很方便。正因如此,使用redis可以让代码变得更易维护。Redis数据库有以下几个特点:1、虽然数据保存在内存中,但支持数据持久化。2、结构简单,支持多种数据类型3、支持主从结构,效率和可靠性有保障。

2.5 NGINX简介

Nginx 是一个高性能异步框架的网页服务器。也可用作反向代理和负载均衡器。由Igor Sysoev开发。当然Nginx同时也可以作为电子邮件代理服务器。在以类BSD许可证的形式开源后,广受欢迎。在高并发使用时,cpu、内存等资源消耗依然很低,运行非常稳定。已被广泛应用于各大网站系统中。


第3章 需求分析及可行性研究

3.1 需求分析

3.1.1系统目标

系统的目标是指系统应该达到什么效果,这无关技术,就是指站在用户角度,我们的博客系统需要达到什么效果。

我们的目的是开发一个人机交互良好的博客系统,使用户能通过个人博客系统在网络上结交更多朋友,同时为用户提供记录和分享信息的平台。

3.1.2游客身份

首先,游客进入主页后可以浏览博文和发表评论,发表评论需在博客评论处输入邮箱信息,发表成功后博主可审核评论。

游客在内容划分上,主要分为一下两个部分:

  1. 搜索和浏览文章: 由于系统是个人博客,游客不须登录系统就可以查看博主文章,但游客不能发表文章。

  2. 评论文章:

对文章进行留言。

添加图片注释,不超过 140 字(可选)

图 1

3.1.3管理员身份

博主拥有自己的管理后台,可以在后台上对文章进行管理,包括发表修改和删除。同时也可以在后台对游客发表的留言进行审核,使留言展示出来或者隐藏。

个人博主在内容划分上,主要分为一下三个部分:

  1. 发表文章: 在管理后台上编辑和文章。

  2. 管理文章: 对已经发表的文章进行修改、删除等操作。

  3. 评论管理:

对游客以及其他用户发表的评论和留言进行审核,删除。

添加图片注释,不超过 140 字(可选)

图 2

3.2可行性研究

可行性研究的最终目的,是通过运用科学的方法验证问题是否值得解决,通常需要对项目进行全面分析。 任何项目的开始,都需要可行性研究阶段。如果在没有可行性研究的情况下盲目进行开发,则很难预测成功的可能性。

3.2.1 经济可行性

博客系统所需的硬件和软件环境(Python + MySQL)可以很轻松从市场上的相关网站购买和下载。根据不完全调查显示,各服务商的虚拟服务器成本已降到可接受的范围内,系统的成本主要是在的开发和维护上,给个人带来的经济负担并不大。使用此博客系统后,可以增加资源共享,提高资源利用率,博客可以极大地促进信息管理。另外,节省人力资源的好处远远大于开发管理系统的成本,因为目标系统并不复杂,开发周期也比较短,并且没有大量的员工支出。是可行的。

3.2.2 技术的可行性

我们的个人博客系统主要包括前端展示的开发以及后端数据库的建立。在前端展示上,我们完全有能力使其完整且易于使用,而对于后端及数据库的建立上,则需要构建具有强大数据一致性和完整性以及良好数据安全性的数据库。该系统打算分别使用基于Python的Flask框架和MS SQL作为后端数据存储的开发工具。该系统主要使用Flask框架和bootstrap等技术实现。 Python最初是被设计用于编写自动化脚本语言,具有快速开发的特性。使用它的目的为了实现快速开发。这使得开发客户端应用程序等成为可能。 Flask的模板功能提供了一种编写动态网页的更简单,更有效的方法,并增强网页程序的独立性,兼容性和可重用性。 Flask的工作模式是请求/响应模式。客户端发送一个HTTP请求。收到请求后,Flask程序对其进行处理并返回处理结果。

Mysql是一个具有完全Web支持的数据库产品。它能通过结构化查询语言(SQL)提供在互联网上进行查询的能力。它能提供基于标准SQL语言交互以及拓展数据库编程和查询功能。而得益于Flask微框架的概念。Flask的第三方扩展可以为我们提供多种数据库的接入方式。这样我们可以很轻松的接入Mysql数据库。 在大大提高开发效率的同时,它进一步扩展了应用空间并带来了新的业务应用机会。

因此从技术方面来说,此系统方案是可行的、可实际实现的。


第4章 系统总体设计

4.1系统设计原则

以上述博客系统的需求分析为出发点,本博客系统的设计应该遵循以下几个原则:

  1. 在产品设计上符合现今技术的潮流,技术设计具有前瞻性,但必须满足功能期望的前提。

  2. 系统必须操作简单,命名和技术使用满足规范型。同时具有良好的输入输出接口。

  3. 系统的各功能设计要完善,能够有效解决用户使用过程中出现的问题,满足用户各个方面的使用需要。

  4. 系统流程合理,能够符合博客管理及使用的基本操作流程。

4.2系统功能设计

4.2.1总体功能描述

博客系统主要用于使用户能够浏览博文及发表评论,博主管理相关信息,查看和相关评论,博主可以发表文章和照片上传、发送相关评论, 用于浏览和注册已注册的相册。 以及简单的后台管理。

从功能上分,本系统主要分为两个部分。由博主对博客内容进行管理的,另一部为前台游客访问和浏览博客。

  1. 博主管理博客 登陆功能:博主从管理后台登录,登录成功即展示后台功能。 文章管理:博主通过管理后台对文章进行管理,如发表文章和删除文章等。 留言管理:博主可以对给自己的留言查看和删除。 评论管理:博主通过管理后台对评论进行管理,如增、删、查。

  2. 游客浏览模块

文章查看功能:游客可以浏览文章并做出,评论显示需要博主审核。

留言板功能:给博主留言。

4.2.2功能模块设计

博客系统主要用于使用户能够浏览博文及发表评论,博主管理相关信息,查看和相关评论,博主可以发表文章和照片上传、发送相关评论, 用于浏览和注册已注册的相册。 以及简单的后台管理。

系统所实现的功能的完整性是衡量一个系统完备性的最基本标准。综合本系统各子模块要实现的功能,通过上述的需求分析。便确定了本系统的功能以及模块图。

本个人博客系统分为两个大的功能模块:前台展示(用户界面)和后台管理(博客管理)。前台展示和后台管理又分别划分为几个小的模块,如图5-2所示为博客系统的功能模块划分图:

添加图片注释,不超过 140 字(可选)

图 3

4.2.2数据库设计

4.3数据库设计概念

从概念上看,为给定的应用系统构造最优的数据存储模式,就是数据库设计。它的目的是使系统与数据库相关联。它能最大程度上影响数据的存储的方式,合理的数据存储模式能够直接影响到系统功能的实现。

4.3.1数据库逻辑结构设计

独立于任何一种数据库模型的设计,即概念设计。它是通过对需求的综合分析而形成的独立的概念结构。它是对用户需求的一种抽象表达方式。本博客系统的实体有:博主/管理员实体、游客实体、文章实体、文章标签实体、评论实体、文章类型实体。将概念设计所得的E-R图如图4-1所示

添加图片注释,不超过 140 字(可选)

图 4

4.3.2数据库物理设计

在数据库的选择中,本博客系统选用了开源的Mysql数据库,数据库名为mydb。数据库中表主要有管理员用户表、日志表、评论表、说说表、相册表、设置表。

管理员表主要拥有管理员id字段,用户名,密码字段,如下表:

表1 管理员表

名称

类型

说明

是否为空

备注

id

int(11)

管理员编号

主键

site_name

varchar(10)

主页Logo

site_title

varchar(255)

Logo小标题

name

varchar(10)

博客名

profile

varchar(255)

个性签名

login_name

varchar(500)

管理员账号

password_hash

varchar(500)

管理员密码

record_info

varchar(255)

拓展

分类表有分类id、分类名字段,如下表:

表2 分类表

名称

类型

说明

是否为空

备注

id

int(11)

标签编号

主键

category

varchar(6)

分类名

标签表有标签id、标签名字段,如下表:

表3 标签表

名称

类型

说明

是否为空

备注

id

int(11)

标签编号

主键

category

varchar(25)

标签名

标签表有评论id、评论、评论者名称、评论者邮箱字段,如下表:

表4 评论表

名称

类型

说明

是否为空

备注

id

int(11)

评论编号

主键

comment

text

评论

author

varchar(25)

评论者名称

email

varchar(255)

评论者邮箱

website

varchar(255)

保留

isReply

tinyint(1)

是否首层评论

disabled

int(11)

是否显示

record_info

tinyint(1)

是否通过审核

timestamp

datetime

时间

post_id

int(11)

文章编号

page_id

int(11)

保留

article_id

int(11)

保留

文章表主要有分类id、文章、标题、时间字段,如下表:

表5 文章表

名称

类型

说明

是否为空

备注

id

int(11)

文章编号

主键

title

varchar(64)

文章名

url_name

varchar(64)

文章连接

timestamp

varchar(64)

发布时间

body

test

文章内容

draft

tinyint(1)

是否草稿

disable

tinyint(1)

是否发布

tags

varchar(64)

文章标签

category_id

int(11)

分类名


第5章 主要功能的实现

5.1后台登录

首先编写前端展示的页面,创建登录表单

...

<div class="login-input">

<form action="{ { url_for('admin.login') }}" method="post">

{ {form.hidden_tag()}}

<p>用户:{ {form.username(class="login")}}</p>

<p>密码:{ {form.password(class="login")}}</p>

<p>记住:{ {form.remember_me}}</p>

<p><input class="but" type="submit" value="登录"></p>

</form>

</div>

...

创建表单后,前端页面已经可以看到登录界面了,接下来定义登录接口,绑定路由并添加处理函数

@admin.route('/login/', methods=['GET', 'POST'])#绑定路由

def login():#登录处理函数

form = AdminLogin()#创建用户对象

if form.validate_on_submit():#提交数据处理逻辑

user = Admin.query.filter_by(login_name=form.username.data).first()

if user is not None and user.verify_password(form.password.data):

login_user(user, form.remember_me.data) #校验用户名和密码

return redirect(url_for('admin.index')) #验证成功重定向

flash('账号或密码无效。')#验证失败返回提示

return render_template('admin/login.html',title='登录',form=form)

用户界面如图5所示,填写正确的用户名和密码即可登录成功,在未登录的情况下进入其他页面,会跳转回到登录页,实现登录界面如下:

添加图片注释,不超过 140 字(可选)

图 5 登录页面

用户如果账号密码验证失败,会在上方返回提示,首先界面如下图:

添加图片注释,不超过 140 字(可选)

图 6 登录失败

5.2文章发表

编写前端模板

...

<div class="data-ipt">

<p>分类:{ {form.category(placeholder="只能写一个")}}</p>

<p>标签:{ {form.tags(placeholder="用英文逗号隔开")}}</p>

<p>链接:{ {form.url_name(placeholder="url文章名")}}</p>

<p>日期:{ {form.time(placeholder="使用-连接年月日")}}</p>

</div>

...

编写处理函数

@admin.route('/write', methods=['GET', 'POST'])#代理路由,绑定到/write

@login_required#此页面需要登录

def write():#逻辑处理函数

form = AdminWrite()#生成表单对象

if form.validate_on_submit():# 保存草稿

if 'save_draft' in request.form and form.validate():

post = save_post(form, True)

db.session.add(post)

flash('保存成功!')# 发布文章

elif 'submit' in request.form and form.validate():

post = save_post(form)

db.session.add(post)

flash('发布成功!')

db.session.commit()

return redirect(url_for('admin.write'))

return render_template('admin/admin_write.html',form=form, title='写文章')

实现效果

添加图片注释,不超过 140 字(可选)

图 7 发表文章界面

5.3用户评论

在文章的浏览页面加入一个表单,用来接收用户的评论以及一些用户信息,主要代码主要如下:

def save_comment(post, form):

base_url = current_app.config['WEB_URL'] # 站点链接

...

if replyTo: #判断评论是否为主评论

comment = '<p class="reply-header"><a class="comment-user" href="' + website +'" target="_blank">'+ nickname + '</a>'+ '<span>回复</span> ' + replyName + ':</p>\n\n' + com

else:

comment = '<p class="reply-header">' + nickname + '<span>回复</span> ' + replyName + ':</p>\n\n' + com

db.session.add(comment)#将评论添加到数据库会话

db.session.commit()#将会话提交保存

return data

执行过程如下,在文章下方输入评论和邮箱如图:

添加图片注释,不超过 140 字(可选)

图 8 评论框

系统首先会检查个人信息是否符合规范,不符要求则返回错误

添加图片注释,不超过 140 字(可选)

图 9 错误提示

修改正确后,再次提交,成功后返回需要审核信息。

添加图片注释,不超过 140 字(可选)

图 10 提交评论成功

5.4修改文章

首先将提交按钮绑定到路由'/edit/<int:time>/<name>'中,。主要代码主要如下:

if post.draft is True:

if 'save_draft' in request.form and form.validate():

db.session.add(post)

flash('成功保存!')

elif 'submit' in request.form and form.validate():

post.draft = False

db.session.add(post)

db.session.commit()

flash('修改成功')

return redirect(url_for('admin.admin_edit', time=post.timestampInt, name=post.url_name))

点击编辑后,跳入文章编辑页面,修改完成,点击更新按钮,系统执行上述代码段保存修改。首先界面如图:

添加图片注释,不超过 140 字(可选)

图 11 文章管理

点击更新后,返回更新结果:

添加图片注释,不超过 140 字(可选)

图 12 修改结果

5.5评论审核

评论审核主要逻辑代码如下,在把函数绑定url后,函数接收评论状态并提交数据库修改:

@admin.route('/allow/comment/<int:id>')#绑定路由

@login_required #此接口需要登录

def allow(id):#逻辑处理函数

comm = Comment.query.get_or_404(id)#获取评论对象

comm.disabled = True#设置显示标志

db.session.add(comm)#提交数据库会话

db.session.commit()#保存修改

flash('允许通过')#返回提示

评论审核主页面:

添加图片注释,不超过 140 字(可选)

图 13 评论管理主页面

5.6数据接口

为了首先和前台的交互,以及方便我们获取服务端数据,我们把数据获取的方式全部统一放在api文件中,数据获取全部这一文件中实现。如,获取文章的接口主要代码主要如下:

@api.route('/posts') #绑定路由

def get_pos(): #具体处理函数

page = request.args.get('page', 1, type=int) #获取分页

pagination = Post.query.order_by(Post.timestamp.desc()).paginate(

page, per_page=current_app.config['POSTS_PER_PAGE'],error_out=False)

posts = [post for post in pagination.items if post.draft is False]

prev = None

if pagination.has_prev:

prev = url_for('api.get_posts', page=page - 1, _external=True)

next = None

if pagination.has_next:

next = url_for('api.get_posts', page=page + 1, _external=True)

return jsonify({ 'posts': [post.to_json() for post in posts],'prev': prev,'next': next,'count': pagination.total})


第6章 系统测试

6.1系统测试的目的

测试是具有试验性质的测量,软件测试的目的是在程序上线前,尽可能多的测试出BUG。进行系统测试是保证系统质量不可或缺的一步。首先,测试不仅仅是为了找出错误。也是为了通过分析错误的过程,完善程序本身。

6.2系统测试的方法

系统测试的方法主要有黑盒测试和白盒测试,主要从从是否关心内部结构的层面区分。

白盒测试也称驱动测试,它是在知晓内部细节的情况下,测试产品的内部动作是否正常进行,验证程序是否按预定正常运作。我们通过把整个程序当成一个被打开的盒子,在知悉实现细节的情况下测试实际状态是否符合预期。

黑盒测试也称为数据驱动测试,我们把整个程序当成一个黑盒子,我们在不了解细节的情况下,通过输入输出检查程序是否正常运行。

在我们的系统中,主要用到黑盒测试。

6.3系统测试用例

在我们的系统中,主要用到黑盒测试。

  1. 博客管理员登录测试 测试内容:在博客的管理后台上输入账号信息,验证是否能登录结果。 操作:①在正确位置填写正确的账号、密码,点击提交。 ②在正确位置填写错误的账号、密码,点击提交。 结果:①登录成功,返回博客后台界面首页。 ②登录失败,提示重新登陆。

添加图片注释,不超过 140 字(可选)

图 14 登录成功

添加图片注释,不超过 140 字(可选)

图 15 登录失败

  1. 文章发表测试 测试内容:发表新博文 操作:首先登录管理后台,取得权限后进入文章发表界面,输入文章标题,文章时间,文章内容,点击提交。 结果:文章发表成功

添加图片注释,不超过 140 字(可选)

图 16 发表文章

  1. 游客对文章进行评论 测试内容:评论文章 操作:游客进入博客系统首页,在首页浏览文章并打开文章后,在文章下方输入个人信息和评论内容后,点击提交。 结果:显示评论成功

添加图片注释,不超过 140 字(可选)

图 17 输入评论

添加图片注释,不超过 140 字(可选)

图 18 评论成功

  1. 审核评论 测试内容:对评论进行审核 操作:管理员登录管理后台,在后台选择评论管理,在评论管理页面对评论进行显示或删除操作。 结果:评论审核成功

添加图片注释,不超过 140 字(可选)

图 19 评论审核页面

添加图片注释,不超过 140 字(可选)

图 20 通过评论


第7章 总结与展望 7.1博客系统的主要特点 本设计基于综合Python语言,合理运用了web框架、数据库等技术,详细阐述了基于Flask的博客系统的分析与实现过程,采用了Flask设计,从职责上分为三部分:前端模板、数据处理、数据传输。其中使用Flask框架作为系统的整体基础。 主要特点有:

  1. 利用Flask-admin的组件实现了图片的快速上传功能,使得用户对相册的管理更加的快捷方便。

  2. 链接好友的博客,评论可自定义链接,使交流也更加的方便。

  3. 用户可以根据文章所属的类别、标签查看同一类别、标签下的所有文章。

7.2系统的不足之处

首先,访问者可以在进入主页后查看博客文章以及发表评论。要发表评论,必须在博客的评论部分中输入电子邮件信息。

该系统基本上可以满足整个博客的功能要求,但是由于本博客系统的设计还不够广泛,市场上已近有有许多成熟的博客系统,由于知识和时间的限制,该系统仍然存在一些限制、缺陷。需要进一步调查和改进。系统设计的弊端主要体现在以下几个方面:

(1)由于对前端页面布局的了解有限,因此该系统的界面相对不专业,可能需要在交互上的优化。

(2)由于在前期开发过程中,代码设计并不完善,虽然勉强实现了相同的效果,但是代码并不简洁明了,需要质量上的优化。

(3)由于时间的限制,以后的测试可能会比较粗糙,并且BUG的程度可能会有所不同,因此在未来的设计中需要做出相应的改进和修正。

7.3前景展望

首先,用户可以在进入主页后查看博客文章并发表评论。要发表评论,则必须在博客的评论部分中输入电子邮件信息。

在各种领域全球化发展的现在,封闭的国家无法跟上发展的潮流,这是一个供人的事实,个人博客的发展亦是如此,信息交流的过程是一个没有界限的交流过程。建立个人博客是为了满足人们对这种交流的需要。有了个人博客,使得每个人都可以构建一个在全球化过程中可以自由发布信息的平台。这是互联网给人们生活带来的变革。

个人博客平台的发展和进步是一个必然的过程。信息的全球化,为人们接触更多的信息提供了机会与平台。把人们带入交互式网络社会的同时,也突破了不同地区人与人之间的障碍,在给人们带来机会的同时,也为人们的发展以及眼界的提升带来了前所未有机遇。这样一个开放的世界使得我们更加的关注个性化的人们,追求各种文化和精神创造力,并引起人们对全球化背景的关注。

因此,研发一个完善的博客系统,是使未来的互联网通信过程更加方便和易于交互的必然趋势。


参考文献:

[1]胡小丽,徐远纯.基于python的博客分层聚类研究与分析[J].福建电脑,2012,28(05):98-99.

[2] 李超,徐云龙,华中伟,史梦安,张滢.一种基于Python Flask的Web服务器端设计[J].信息与电脑(理论版),2019(08):87-88.

[3] 马旭,王淑丽.基于Flask框架的展示型网站的设计与实现[J].数字技术与应用,2018,36(11):137-138.

[4] 叶锋.Python最新Web编程框架Flask研究[J].电脑编程技巧与维护,2015(15):27-28.

[5]郑阿奇.SQL Server 实用教程(第2 版)[M].北京:电子工业出版社,2005

[6] Magnus Lie Hetland. Python基础教程(第3版)[M].袁国忠. 译. 人民邮电出版社, 2018

[7] Luciano Ramalho.流畅的Python[M].安道,吴珂. 译. 人民邮电出版社, 2017

[8]岳 浩.Linux操作系统教程[M] .机械工业出版社 2005

[9]杜波依斯. MySQL技术内幕[M]. 第4版. 人民邮电出版社 , 2011

[10] 李辉. Flask Web开发实战[M]. 第2版. 电子工业出版, 2018

[11] 美福达. SQL必知必会[M]. 人民邮电出版社.2013

[12] Meng Christian,Baier Harald. bring2lite: A Structural Concept and Tool for Forensic Data Analysis and Recovery of Deleted SQLite Records[J]. ,2019,29(S).

[13] Li Zhang,Shengang Hao,Quanxin Zhang. Recovering SQLite data from fragmented flash pages[J]. Annals of Telecommunications,2019,74(7-8).

相关文章:

基于python的博客系统设计与实现

摘要&#xff1a;目前&#xff0c;对于信息的获取是十分的重要&#xff0c;我们要做到的不是裹足不前&#xff0c;而是应该主动获取和共享给所有人。博客系统就能够实现信息获取与分享的功能&#xff0c;博主在发表文章后&#xff0c;互联网上的其他用户便可以看到&#xff0c;…...

服务器日志自动上传到阿里云OSS备份

背景 公司服务器磁盘空间有限&#xff0c;只能存近15天日志&#xff0c;但是有时需要查看几个月前的日志&#xff0c;需要将服务器日志定时备份到某个地方&#xff0c;需要查询的时候有地方可查。 针对这个问题&#xff0c;想到3个解决方法&#xff1a; 1、买一个配置比较低…...

优化使用 Flask 构建视频转 GIF 工具

优化使用 Flask 构建视频转 GIF 工具 优化后的项目概述 在优化后的版本中&#xff0c;我们将实现以下功能&#xff1a; 可设置每个 GIF 的帧率和大小&#xff1a;用户可以选择 GIF 的帧率和输出大小。改进的用户界面&#xff1a;使用更现代的设计使界面更美观、整洁。自定义…...

leetcode:511. 游戏玩法分析 I

难度&#xff1a;简单 SQL Schema > Pandas Schema > 活动表 Activity&#xff1a; ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_playe…...

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…...

【Python运维】Python与网络监控:如何编写网络探测与流量分析工具

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着互联网技术的快速发展,网络性能的监控与分析成为保障信息系统稳定运行的关键环节。本文深入探讨了如何利用Python语言构建高效的网络探…...

OpenCV相机标定与3D重建(61)处理未校准的立体图像对函数stereoRectifyUncalibrated()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为未校准的立体相机计算一个校正变换。 cv::stereoRectifyUncalibrated 是 OpenCV 库中的一个函数&#xff0c;用于处理未校准的立体图像对。该函…...

字玩FontPlayer开发笔记12 Vue3撤销重做功能

字玩FontPlayer开发笔记12 Vue3撤销重做功能 字玩FontPlayer是笔者开源的一款字体设计工具&#xff0c;使用Vue3 ElementUI开发&#xff0c;源代码&#xff1a;github | gitee 笔记 撤销重做功能是设计工具必不可少的模块&#xff0c;以前尝试使用成熟的库实现撤销重做功能…...

无人机图传模块:深入理解其工作原理与实际效用

无人机图传模块作为无人机系统的关键组成部分&#xff0c;承担着将无人机拍摄的图像和视频实时传输至地面控制站或接收设备的重任。本文将深入探讨无人机图传模块的工作原理及其在实际应用中的效用&#xff0c;帮助读者更好地理解这一技术的奥秘。 一、无人机图传模块的工作原…...

PDF文件提取开源工具调研总结

概述 PDF是一种日常工作中广泛使用的跨平台文档格式&#xff0c;常常包含丰富的内容&#xff1a;包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用&#xff0c;尤其是RAG项目中&#xff0c;通过将非结构化数据转化为结构化和可访问的信息&#xff0…...

Linux(Centos 7.6)命令详解:dos2unix

1.命令作用 将Windows格式文件件转换为Unix、Linux格式的文件(也可以转换成其他格式的) 2.命令语法 Usage: dos2unix [options] [file ...] [-n infile outfile ...] 3.参数详解 options: -c, --convmode&#xff0c;转换方式&#xff0c;支持ascii, 7bit, iso, mac,默认…...

梯度提升决策树树(GBDT)公式推导

### 逻辑回归的损失函数 逻辑回归模型用于分类问题&#xff0c;其输出是一个概率值。对于二分类问题&#xff0c;逻辑回归模型的输出可以表示为&#xff1a; \[ P(y 1 | x) \frac{1}{1 e^{-F(x)}} \] 其中 \( F(x) \) 是一个线性组合函数&#xff0c;通常表示为&#xff…...

跨域问题分析及解决方案

1、跨域 指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对javascript施加的安全限制。 2、同源策略&#xff1a;是指协议&#xff0c;域名&#xff0c;端口都要相同&#xff0c;其中有一个不同都会产生跨域&#xff1b; 3、跨域流程…...

【三国游戏——贪心、排序】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int a[N], b[N], c[N]; int w[4][N]; int main() {int n;cin >> n;for(int i 1; i < n; i)cin >> a[i];for(int i 1; i < n; i)cin >> b[i…...

深入理解 Java 的数据类型与运算符

Java学习资料 Java学习资料 Java学习资料 在 Java 编程中&#xff0c;数据类型与运算符是构建程序的基础元素。它们决定了数据在程序中的存储方式以及如何对数据进行各种操作。 一、数据类型 &#xff08;一&#xff09;基本数据类型 整型&#xff1a; 用于存储整数数值&…...

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测 目录 WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-GRU-Attention、…...

(二叉树)

我们今天就开始引进一个新的数据结构了&#xff1a;我们所熟知的&#xff1a;二叉树&#xff1b; 但是我们在引进二叉树之前我们先了解一下树&#xff1b; 树 树的概念和结构&#xff1a; 树是⼀种⾮线性的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09; …...

Linux shell 批量验证端口连通性

脚本 #!/bin/bash # #database check #set -o nounset LOCALIPifconfig | grep inet | head -1 | awk {print $2} | sed s/addr\:// IPLIST192.168.1.99 192.168.1.98 192.168.1.97 PORTLIST81 82 83 84 85 86 check_nc(){ for CHECK_IP in $IPLIST dofor CHECK_PORT in $PORT…...

Java 中实体类与操作类分离

目录 一、为啥要把实体类和操作类分开 二、实体类长啥样&#xff0c;怎么用 三、操作类的使命与实现 四、实战演练&#xff1a;实体类与操作类协同工作 五、拓展思考&#xff1a;这种分离带来的好处与进一步优化 六、总结与展望 家人们&#xff0c;今天我想跟你们唠唠我在…...

创建 pdf 合同模板

创建 pdf 合同模板 一、前言二、模板展示三、制作过程 一、前言 前段时间要求创建“pdf”模板&#xff0c;学会了后感觉虽然简单&#xff0c;但开始也折腾了好久&#xff0c;这里做个记录。 二、模板展示 要创建这样的模板 三、制作过程 新建一个“Word”&#xff0c;这里命…...

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

BOBO小火炬全套源码XE修复版2025(火炬天花板二次开发版)

《小火炬全套源码 传奇游戏源码讲解》 小火炬全套源码是一种用于开发经典传奇类游戏的源码包。传奇游戏作为一款经典的多人在线角色扮演游戏&#xff08;MMORPG&#xff09;&#xff0c;有着庞大的用户基础和强大的游戏生态。小火炬全套源码主要提供了从基础架构到核心功能的完…...

【基于无线电的数据通信链】Link 11 仿真测试

〇、废话 Link 11 仿真测试 涉及多个方面&#xff0c;包括信号仿真、协议模拟、数据链路层的仿真以及网络性能评估等。Link 11 是一种基于 HF&#xff08;高频&#xff09; 或 UHF&#xff08;超高频&#xff09; 波段的无线通信协议&#xff0c;主要用于军事通信系统中。为了…...

WPF实战案例 | C# WPF实现计算器源码

WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09;2.3 实现步骤总结 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…...

WebSocket 和 Socket 的区别

一、协议层次和工作方式 1.1 &#xff09;Socket 1.1.1&#xff09;Socket位于传输层&#xff0c;通常使用TCP或UDP协议 1.1.2&#xff09;提供了一个通用的网络编程接口&#xff0c;允许应用程序通过它发送和接收数据 1.1.3&#xff09;一般需要手动管理连接&#xff0c;错…...

Matlab自学笔记四十五:日期时间型和字符、字符串以及double型的相互转换方法

1.说明 在Matlab中&#xff0c;大多数函数都有这样的功能&#xff1a;创建函数本身具有转换的功能&#xff0c;例如double函数&#xff0c;可以创建双精度浮点数&#xff0c;也可以把输入参数转换成双精度浮点数&#xff0c;再例如string&#xff0c;可以创建字符串&#xff0…...

Python基础学习(六)unittest 框架

1.介绍 是 Python自带的单元测试框架 - 自带的, 可以直接使用, 不需要单外安装 - 测试人员&#xff0c;用来做自动化测试, 作为自动化测试的执行框架,即管理和执行用例的 核心要素&#xff1a; TestCase 测试用例, 这个测试用例是 unittest 的组成部分,作用是用来书写真正的…...

Python数据可视化(够用版):懂基础 + 专业的图表抛给Tableau等专业绘图工具

我先说说文章标题中的“够用版”啥意思&#xff0c;为什么这么写。 按照我个人观点&#xff0c;在使用Python进行数据分析时&#xff0c;我们有时候肯定要结合到图表去进行分析&#xff0c;去直观展现数据的规律和特定&#xff0c;那么我们肯定要做一些简单的可视化&#xff0…...

麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 之前咱们学习了LNMP架构&#xff0c;但是PHP对于技术来说确实是老掉牙了&#xff0c;PHP的市场占有量越来越少了&#xff0c;我认识一个10年的PHP开发工程师&#xff0c;十年工资从15k到今天的6k&am…...

Docker集成onlyoffice实现预览功能

1.拉取镜像 docker pull onlyoffice/documentserver 2. 数据卷挂载 mkdir -p app/onlyoffice/DocumentServer/logs mkdir -p app/onlyoffice/DocumentServer/data mkdir -p app/onlyoffice/DocumentServer/lib mkdir -p app/onlyoffice/DocumentServer/db 3.运行容器 docker ru…...

Flowable 管理各业务流程:流程设计器 (获取流程模型 XML)、流程部署、启动流程、流程审批、流程挂起和激活、任务分配

文章目录 引言I 表结构主要表前缀及其用途核心表II 流程设计器(Flowable BPMN模型编辑器插件)Flowable-UIvue插件III 流程部署部署步骤例子:根据流程模型ID部署IV 启动流程启动步骤ACT_RE_PROCDEF:流程定义相关信息例子:根据流程 ID 启动流程V 流程审批审批步骤Flowable 审…...

BladeDISC++:Dynamic Shape AI 编译器下的显存优化技术

近年来&#xff0c;随着深度学习技术的迅猛发展&#xff0c;越来越多的模型展现出动态特性&#xff0c;这引发了对动态形状深度学习编译器(Dynamic Shape AI Compiler)的广泛关注。本文将介绍阿里云 PAI 团队近期发布的 BladeDISC项目&#xff0c;探讨在动态场景下如何优化深度…...

FFmpeg常用命令

文章目录 一、 FFmpeg 音视频的处理流程二、FFmpeg 常用命令2.1、查看本机支持的采集设备2.2、 录制视频2.2.1、原始视频2.2.2、编码的视频 2.3、录制音频&#xff1a;2.3.1、原始音频2.3.2、编码的音频 2.4、录制音视频&#xff1a;2.5、文件格式转换&#xff1a;2.6、提取音频…...

http请求开启长连接导致请求偶发失败

问题描述&#xff1a; http长连接的意思是服务器为了调用时减少TCP三次握手开销&#xff0c;会复用之前已经发起的请求&#xff0c;比较适合频繁交互&#xff08;比如数据推送、流水线操作等&#xff09;的场景&#xff0c;但是如果超过服务器配置的连接最大空闲时间&#xff0…...

JUnit单元测试

单元测试 就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其正确性进行测试 JUnit 最流行的java测试框架之一&#xff0c;方柏霓进行单元测试 入门程序 使用Junit&#xff0c;对UserService的方法进行单元测试 1.在pom.xml中&#xff0c;…...

智慧公安(实景三维公安基层基础平台)建设方案——第4章

4 建设内容 4.1 标准规范体系 在国家和地方公安基层信息化标准规范的基础上,结合项目实际情况,制定标准规范及管理制度,构建统一的标准规范体系,以便更好地实现公安基层基础信息的高度共享、平台运行的统一协调、业务流程最优化。主要包括以下内容: 1. 业务标准规范 (…...

LLMs(大型语言模型)的多智能体:Auto-GPT

LLMs(大型语言模型)的多智能体:Auto-GPT 是指在一个系统中集成多个具有不同能力、角色和任务的智能体,这些智能体能够相互协作、沟通和交互,以共同完成复杂的任务或解决复杂的问题。每个智能体都可以被视为一个独立的实体,具有自己的策略、目标和知识库,通过相互之间的…...

《Effective Java》学习笔记——第2部分 对象通用方法最佳实践

文章目录 第2部分 所有对象通用方法一、前言二、最佳实践内容1. equals()方法2. hashCode()方法3. toString() 方法4. clone() 方法5. finalize() 方法6. compareTo()方法&#xff08;实现 Comparable 接口&#xff09; 三、小结 第2部分 所有对象通用方法 一、前言 《Effect…...

2024年智慧消防一体化安全管控年度回顾与2025年预测

随着科技的飞速发展&#xff0c;智慧营区一体化安全管控在2024年取得了显著进展&#xff0c;同时也为2025年的发展奠定了坚实基础。 2024年年度回顾 政策支持力度持续加大&#xff1a;国家对消防安全的重视程度不断提高&#xff0c;出台了一系列涵盖技术创新、市场应用、人才培…...

艺术家迟首飞在特殊历史时刻展现中国艺术力量

艺术家迟首飞在特殊历史时刻展现中国艺术力量 艺术创作的边界正被不断拓展。中国艺术家迟首飞以其纪实视野&#xff0c;将传统与现代元素巧妙融合&#xff0c;展现全球艺坛力量&#xff0c;创作出一系列精彩作品。尤其是《平安兔》《福》与TikTok标志的结合的作品&#xff0c;…...

探索微服务架构:从单体应用到微服务的转变

引言 随着互联网业务的日益复杂和用户需求的快速增长&#xff0c;软件开发的架构模式也在不断演进。从最早的单体应用架构到后来的分层架构&#xff0c;再到如今备受关注的微服务架构&#xff0c;每一种架构模式都试图解决软件开发中的不同挑战。尤其是在现代互联网企业中&…...

MongoDB vs Redis:相似与区别

前言 在当今的数据库领域&#xff0c;MongoDB 和 Redis 都是备受关注的非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它们各自具有独特的优势和适用场景。本文将深入探讨 MongoDB 和 Redis 的特点&#xff0c;并详细对比它们之间的相似之处和区别&#xff0c;帮助…...

Jenkins-pipeline语法说明

一. 简述&#xff1a; Jenkins Pipeline 是一种持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;它允许用户通过代码定义构建、测试和部署流程。 二. 关于jenkinsfile&#xff1a; 1. Sections部分&#xff1a; Pipeline里的Sections通常包含一个或多个Direc…...

MySQL(3)运算符、排序与分页

运算符 一、算术运算符 加减乘除余 举例&#xff1a; SELECT 1001 FROM DUAL; 结果为101&#xff0c;与java中的连接字符串不同。 SELECT 100A FROM DUAL; 结果为100。 也可以理解为&#xff0c;遇到非数值类型时&#xff0c;先转换为数值类型&#xff08;如2可以转换…...

Kafka面试题----Kafka消息是采用Pull模式,还是Push模式

Pull 模式为主 消费者主动拉取&#xff1a;Kafka 中的消费者是基于 Pull 模式来获取消息的。消费者通过向 Kafka 集群发送拉取请求&#xff0c;主动地从 Broker 中获取消息。这种方式使得消费者可以根据自身的消费能力和处理速度来灵活地控制消息的拉取频率和数量&#xff0c;…...

BLE透传方案,IoT短距无线通信的“中坚力量”

在物联网&#xff08;IoT&#xff09;短距无线通信生态系统中&#xff0c;低功耗蓝牙&#xff08;BLE&#xff09;数据透传是一种无需任何网络或基础设施即可完成双向通信的技术。其主要通过简单操作串口的方式进行无线数据传输&#xff0c;最高能满足2Mbps的数据传输速率&…...

借助 .pth 文件完成多个 Python 解释器的合并

相关搜索 conda 虚拟环境如何使用 ROS 的 Python 模块conda 虚拟环境找不到 catkin_pkg 问题描述 如果你在 Ubuntu 20.04 中装了 conda&#xff0c;那么你的 Ubuntu 会有这些 Python 解释器&#xff1a; /usr/bin/python3&#xff1a;系统的解释器 (版本为 3.8.10&#xff0…...

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…...

python高级加密算法AES对信息进行加密和解密

AES&#xff08;高级加密标准&#xff09;是一种广泛使用的对称加密算法&#xff0c;它以字节为单位处理数据&#xff0c;将明文分组加密成密文。AES算法的核心在于一个轮函数&#xff0c;该函数会对数据执行多次变换&#xff0c;包括字节代换、行移位、列混合和轮密钥加。这些…...

# [Unity]【游戏开发】 脚本生命周期与常见事件方法

在Unity中,脚本的生命周期是指脚本从创建到销毁的整个过程,以及在此过程中触发的各类事件。掌握脚本生命周期对优化游戏开发过程和避免性能问题至关重要。本文将详细探讨脚本生命周期的关键事件、常见的事件方法,并通过实例说明如何在合适的时机执行脚本逻辑,以确保游戏的流…...