15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > Python Web开发—Flask实战—项目概览及准备、页面设计、表单管理、首页管理、用

Python Web开发—Flask实战—项目概览及准备、页面设计、表单管理、首页管理、用

时间:2023-09-28 19:30:01 | 来源:网站运营

时间:2023-09-28 19:30:01 来源:网站运营

Python Web开发—Flask实战—项目概览及准备、页面设计、表单管理、首页管理、用户管理、博客管理:介绍了Django实战(Python Web开发—Django实战—分类管理、图书管理、作者管理、出版社管理),Flask建站十分方便快捷,本章将以实战形式讲解使用Flask框架创建网站的步骤和方法。在编程过程中,当遇到解决不了的技术问题时,大家都会到网上查询一些技术博客,也有人会在生活博客上记录自己的生活。本章将讲解Flask实战——博客系统。

项目概览及准备

Ø 项目概览

博客系统是一个可管理自己博客,也可浏览其他人博客的一个网站系统,主要包括用户管理、博客管理两大主要内容,本章将围绕这两部分内容详细讲解。接下来讲解博客项目的内容概览,如图所示。

以上是整个项目的目录结构图,接下来将详细讲解目录结构图中的内容。

Ø 项目配置

在进行项目编写前,需要对整个项目进行配置,接下来讲解如何配置博客系统项目。

manage.py(项目中)

上述代码是博客系统的运行配置实现代码。第1~4行是导入所需模块。第6行是获取配置,并将配置名赋值给变量config_name。第8行是创建Flask应用示例“app”。第10行是创建使用命令行启动项目的控制对象并赋值给变量manager。第12行是添加数据库迁移命令。第14~15行是启动项目。

编写了上述配置文件之后可以通过命令“python manage.py runserver -r -d”运行项目,其中“-r”是“reload”的意思,“-d”是“debug”的意思;运行结果如图所示。

对于应用也会有自己的配置信息,包含此应用各个重要内容的配置,如:数据库、开发环境、文件上传、邮件发送等。

上述代码是博客系统的应用配置实现代码。第1行是导入系统模块。第2行是获取当前文件的基地址,并赋值给变量base_dir。第4~22行是通用配置类。第6行是秘钥信息配置。第8是启用自动提交数据库更改。第9行是默认情况为True,Flask-SQLAlchemy会追踪对象的修改并且发送信号,由于此工作需要额外的内存,因此设置为False禁用。第11~16行是邮件发送的相关配置信息。第11~12行是配置邮件发送服务器。第13~14行是发送邮件的用户名。第15~16行是发送邮件的邮箱密码,其中“****”是自己配置的邮箱密码。第18行是定义文件最大内容。第19行是设置文件上传地址。第20~22行是额外的初始化操作,不添加内容也是有意义的。第24~34行是项目开发中各环境的配置类,主要是配置各环境的数据库URI。第36~41行是将各环境配置信息用字典形式标注,方便调用配置。

Ø 项目所使用扩展

由于Flask的各大功能都是依赖扩展来实现的,因此本项目将所有扩展以及使用的初始化内容单独以文件的形式存储,方便使用和移植。接下来讲解本项目所使用到的扩展内容,以及各扩展的对象创建和初始化。

上述代码是博客系统使用到的扩展内容实现。第2~9行是导入所需模块。第11~17行是创建各扩展类的实例对象。第20~26行是初始化各对象实例,其中第26行是登录认证初始化。第28行是指定登录端单为蓝本user的login(蓝本在后续内容中会详细讲解)。第29行是设置需登录才能执行操作的提示信息。第30行是设置session的保护级别。其中有三个级别,分别是None:禁用session保护;basic:基本的保护,默认选项;strong:最严格的保护,一旦用户登录信息改变,立即退出登录。第32行是将app的config配置注册到UploadSet实例photos。第33行是设置文件大小。

Ø 数据库生成

一个网站系统离不开数据库,因此数据库在网站系统中有着特殊的意义,接下来讲解博客系统的数据库生成代码实现。

本博客系统主要包含三个表:用户表、博客表、用户与博客的联系表。

上述代码是博客系统的用户模型实现代码。第2行是定义表名。第3~11行是定义字段名及类型。第11行是在另一个模型中添加一个反向引用,第一个参数是关联的模型名;第二个参数是在关联的模型中动态添加字段;第三个参数是加载方式,其中值为dynamic表示不加载,但提供记录的查询;若使用一对一,添加参数uselist并置为Flase。第13~15行是设置密码字段保护,设置为不可读。第17~19行是设置密码并进行加密存储。第21~22行是验证密码。第24~28行是生成激活的token。第29~48行是验证token信息,并将激活状态更新到相应用户中。第33行是加载token,将字符串的token转换成字典形式并赋值给变量data。第34行是捕获到错误的token时抛出异常。第37行是token过时时抛出异常。第40行是根据id查询用户信息,并将用户信息赋值给变量user。第41~43行是当用户不存在时的执行代码。第45~48是当用户未激活时,修改数据库中用户激活状态。第50~56行是判断是否收藏指定博客函数。第58~60行是收藏指定博客函数。第62~64行是取消收藏博客函数。第66~68行是登录认证的回调。

以上是用户模型的实现,接下来讲解博客模型的实现。

app/models/posts.py

上述代码是博客模型实现代码。第2行是定义表名。第3~6行是定义各字段及类型。第8行是添加关联user表的外键。

在对用户和博客模型编写完成后执行数据库文件迁移,具体如下所示:

在Terminal输入命令“python manage.py db init”,初始化迁移文件。

执行成功之后输入命令“python manage.py db migrate”,生成迁移文件。

生成迁移文件之后输入命令“python manage.py db upgrade”,执行迁移(更新迁移)。

执行后查看数据库中表信息如图所示。

在图中,collections表、posts表、users表是编写模型代码实现的,其余表是执行数据库迁移文件时自动生成的。

注意:本章使用的是SQLite数据库。

Ø 蓝本(蓝图)的使用

蓝本是在一个应用中,跨应用制作应用组件和支持通用的模式,换一句话说,蓝本定义了可用于单个应用的视图、模板、静态文件等等的集合。一般需要将应用组织成不同的组件时会使用到蓝本,接下来讲解蓝本的使用。

view/__init__.py

上述代码是博客系统的蓝本配置实现代码。第2~6行是定义蓝本,其中(user,‘/user’),前者是蓝本名,后者是URL中的前缀。第8~10行是蓝本注册,将蓝本名和前缀进行对应注册。

蓝本的定义与注册实现之后,就可以在视图函数(views/main.py)中使用蓝本了,代码如下:

使用蓝本配置路由,代码如下:

页面设计

开发Web网站其中很大一部分是进行页面设计,网站最终是要展示给用户观看及使用的,因此页面设计非常重要,接下来介绍博客系统的页面设计(templates文件中)。

Ø 基页面

base.html是网站中其他页面的基页面,网站中其他页面都继承自base.html,接下来详细解析base.html中内容。

上述代码是博客系统网站的基页面,网站的主要界面均继承自它,因此内容比较重要,接下来对代码作详细解析:第1行是继承Bootstrap框架的基页面。第2行是引入Bootstrap框架中的wtf.html文件,并命名为wtf。第4~8行是样式及静态文件的内容,其中第6~7行是链入图片1.png。第12~54行是整个博客系统的导航栏部分。第17~19行是“首页”的内容及链接({{ url_for('main.index') }})。第20~24行是“我的博客”模块,链接为“{{ url_for('posts.myposts',uid = current_user.id) }}”。第25~49行是用户信息的相关管理链接。第26行是判断用户是否登录,若登录则执行。第27~44行是内容显示。第27行是“退出”,链接为“{{ url_for('user.logout') }}”。第29~44行是用户信息管理的下拉菜单,显示为当前登录的用户名,其中包括“用户详情{{ url_for('user.profile') }}”、“修改密码{{ url_for('user.editpw') }}”、“修改邮箱{{ url_for('user.editemail') }}”、“修改头像{{ url_for('user.icon') }}”四部分内容,若用户未登录则执行46~48行的内容显示,包括“注册{{ url_for('user.register') }}”、“登录{{ url_for('user.login') }}”。第56~67行是博客系统的主体内容。第57~65行是循环遍历flash中的提示信息。第66行是各页面需要显示的内容。第70~74行是js等脚本控制语言。

注意:本节接下来的页面均需要继承自基页面,因此页面均需要在编写代码开始时添加以下代码:

Ø 宏文件

博客系统需要将博客展示给用户观看,随着时间的推移,博客数量会随之增长,因此页面显示需要分页展示,以达到清晰美观的效果。接下来介绍分页的页面设计,具体如宏文件macro.html代码。

templates/common/marco.html

上述代码是博客系统分页显示页面的实现。第1行是定义宏文件内容,包括show_pagination(pagination, endpoint)函数,其中参数pagination是分页对象,参数endpoint是端单。第5~12行是上一页的实现代码。第5~6行是判断分页是否有上一页,如果没有则无法单击,若有则执行下面代码。第7~11行是当分页有上一页时,跳转链接为“{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}”。第14~23行是将所有页数显示在中间。第14行是循环遍历pagination对象中的页数。第15~19行是当页数存在时执行。第16行是判断pagination对象的页码是否与遍历的页码相同,相同则为触发状态。第18~19行是显示中间页码,链接为“{{ url_for(endpoint, page = pagination.next_num,**kwargs) }}”。第21行是当页数不存在时执行。第25~33行是下一页的实现代码。第25行是判断分页是否还有下一页,如果没有则无法单击,若有则执行下面代码。第26~31行是当分页有下一页时,跳转链接为“{{ url_for(endpoint, page = pagination.next_num,**kwargs) }}”。

分页的宏文件到此就编写完成,当文件需要使用分页时,直接传递不同的分页对象即可。

Ø 首页

首页主要是将所有用户的博客显示在页面上,还包含发表博客,接下来讲解首页的页面设计实现,具体如index.html文件。

上述代码是博客系统的首页页面的实现。第1行是继承基页面。第2行是从宏文件中引入show_pagination方法。第6~40行是整个首页的主体内容。第7行是发表博客的表单显示。第10~36行是循环遍历博客并显示在页面中。第15~18行是显示用户的头像。第22~25是显示用户名和博客的主体信息。第27~33行是判断用户是否收藏的显示内容。第39行是分页内容的显示,其中“xxx=’yyy’”是测试,代表可以传递其他的参数。第42~57行是实现收藏与取消收藏的单击事件。

首页的页面设计到此就完成了,主要包括了发表博客表单、各用户的博客展示、博客的收藏与取消收藏以及博客分页显示功能。

Ø 用户信息管理页面设计

用户信息管理是一个网站系统最基本的内容,因此这部分内容的页面设计必不可少。用户信息管理页面设计主要包括用户注册、用户登录、用户详情、修改邮箱、修改密码、修改头像六部分内容。接下来详细介绍每一部分页面设计的实现内容。

一个网站的好坏可以从用户的访问量以及用户的注册量来判断,其中用户的注册量指的是网站的注册用户有多少,接下来讲解用户注册页面实现。

register.html:

上述代码是博客系统的用户注册页面的实现。第1行是继承基页面。第6行是显示用户注册表单。

在用户注册成功之后,需要提供用户登录接口使用户可以登录网站管理自己的内容,接下来讲解用户登录页面实现。

login.html:

上述代码是博客系统的用户登录页面的实现。第1行是继承基页面。第6行是显示用户登录表单。

用户在登录网站之后可以通过接口来查看自己的个人信息,并且通过查看信息可以将需要修改的信息通过其他接口进行修改,接下来讲解用户详情页面实现。

profile.html:

上述代码是博客系统的用户详情显示页面的实现。第1行是继承基页面。第4~21行是显示用户信息的主要内容。第8~10行是判断用户头像img_url是否存在,存在则显示用户头像。第14~15行是以只读的形式显示用户名。第19~20行是以只读的形式显示用户的邮箱。

用户在查看信息之后发现邮箱不是自己常用邮箱,可以通过接口将邮箱进行修改,只是邮箱修改以后需要再次激活用户,接下来讲解修改邮箱页面实现。

editemail.html:

上述代码是博客系统的用户修改邮箱页面的实现。第1行是继承基页面。第6行是显示修改邮箱表单。

如果说用户名是登录网站的通行证,那密码就是登录网站最重要的凭证。网络安全问题一直存在整个互联网上,因此对于密码这样重要的凭证需要时刻保证它的安全,其中一个办法就是定时修改密码,接下来讲解修改密码页面实现。

editpw.html:

上述代码是博客系统的用户密码修改页面的实现。第1行是继承基页面。第6行是显示修改密码表单。

对于新一代的年轻人,信息更新迭代速度太快,用户对于个人头像的喜好也会随之改变,因此需要提供随时更改头像的接口,接下来讲解修改头像页面实现。

icon.html:

上述代码是博客系统的用户修改头像页面的实现。第1行是继承基页面。第6~8行是判断用户的头像img_url是否存在,存在则显示头像。第9行是显示修改头像表单。

Ø 博客管理页面设计

博客管理是管理用户自己的博客,可以显示自己的博客以及删除自己的博客。接下来讲解“我的博客”页面实现。

上述代码是博客系统“我的博客”页面实现。第1行是继承基页面。第2行是从宏文件中引入show_pagination方法。第6~42行是整个页面的主体内容。第7~37行是循环遍历用户的博客并显示在页面中。第8行是判断博客的用户id是否与当前用户id相同,相同则执行下面代码。第12~16行是显示用户头像。第19~22是显示用户名和博客的主体信息。第23~27行是判断用户是否收藏的显示内容。第29~33行是删除本博客,链接为{{ url_for('posts.delpost',pid=p.id,uid=p.uid) }}。第40~41行是分页内容的显示,其中“uid=current_user.id”是将参数uid传递给分页函数。第44~60行是实现收藏与取消收藏的单击事件。

至此博客管理的页面设计已经完成,主要包括了显示博客内容、删除博客功能。

Ø 发送邮件页面设计

此博客系统设计了邮件激活功能,其中在注册时需要填写邮箱地址,通过后台发送邮件给用户,用户单击链接完成激活。接下来讲解发送邮件的页面及内容。

activate.html

HTML文件在邮件中不好显示,因此需要再编写一个文本文件来显示邮件内容,接下来讲解文本文件内容。

上述代码是博客系统的邮件激活内容的HTML代码。第1行是引语,“Hello”与变量“{{username}}”。第2~4行是邮件激活链接内容,链接为“{{ url_for('user.activate', token=token, _external=True) }}”链接中包含了“token”,而其中的参数“_external”设置为True表示可以从外部访问网站。

HTML文件在邮件中不好显示,因此需要再编写一个文本文件来显示邮件内容,接下来讲解文本文件内容。

activate.txt

上述代码是编写在“activate.txt”文件中,与“activate.html”文件只相差HTML标签,其他内容相同,此处不再赘述。

Ø 错误展示页面设计

网站在浏览器中运行时,出现错误会有相应的错误展示页面,即浏览器自带的错误展示页面;若对浏览器自带的错误展示页面不满意,还可以自己编写相应的错误页面,接下来讲解404错误页面实现。

404.html

上述代码是博客系统的404错误页面的实现。第1行是继承基页面。第4~5行是错误页面的主体内容。

本博客系统只编写了404错误页面作为参考,大家还可以自定义其他错误页面。

表单管理

本系统使用了WTF表单插件来实现表单的编写与验证,实现表单与前端模板文件分离。本节主要讲解表单类的实现,接下来详细讲解用户表单和博客表单两部分内容。

Ø 用户表单

用户表单包括用户注册表单、用户登录表单、修改头像表单、修改密码表单、修改邮箱表单五个表单内容,接下来详细讲解这五个表单类的实现。

1.用户注册表单类

上述代码是用户注册表单类的实现。第3~14行是各字段的定义,包括username、password、confirm、email、submit。第17~19行是验证用户名是否唯一的函数。第18行是判断数据库中是否存在提交的用户名,存在则执行下面代码。第19行是返回提示错误“该用户已存在,请选用其它用户名”。第21~23行是验证邮箱是否唯一的函数。第22行是判断数据库中是否存在提交的邮箱,存在则执行下面代码。第23行是返回提示错误“该邮箱已注册,请选用其它邮箱地址”。

2.用户登录表单类

上述代码是用户登录表单类的实现。第3~6行是各字段的定义包括username、password、remember、submit,其中DataRequired()表示必填项。

3.修改头像表单类

上述代码是修改头像表单类的实现。第3~5行是头像字段的定义,其中FileAllowed()函数指定允许的文件类型为photos,FileRequired()表示文件需先选择。第6行是保存并提交字段定义。

4.修改密码表单类

上述代码是修改密码表单类的实现。第3~6行是各字段的定义包括passwordold、passwordnew,其中DataRequired()表示必填项。第7行是确定提交字段。

5.修改邮箱表单类

上述代码是修改邮箱表单类的实现。第3~4行是新邮箱地址字段的定义。第5行是确定提交字段。

上述内容是整个博客系统的用户表单类的实现。

Ø 博客表单

博客最主要的表单内容是发表博客,接下来详细讲解发表博客表单内容。

发表博客表单类

上述代码是发表博客表单类的实现。第2~4行是博客内容字段的定义,其中‘placeholder’是当没有填写内容时输入框内显示的内容。第5行是发表提交字段。

首页管理

Ø 首页管理

首页显示用户博客,也是用户进入网站时第一个浏览到的页面,接下来讲解首页的后台视图实现。

1.视图设计

main.py

上述代码是首页显示的实现。第1行是定义蓝本“main”。第3行是配置首页路由。第5行是创建发表博客表单对象“form”。第8~12行是用户登录之后发表博客实现。第8行是判断用户是否登录。第9~10行是用户对象(u)与发表的博客对象(p)。第11行是将新发表的博客对象添加到数据库。第12行将URL重定向到蓝本main中的首页。第14~15行是当用户没有登录时执行的代码。第14行是flash提示信息。第15行是将URL重定向到蓝本user中的注册页面。第17行是读取页数信息。第18~20行是按需求进行分页查询博客。第21行是将查询出来的博客信息赋值给变量“posts”。第22~23行是渲染首页。

2.运行结果

将首页的相关操作都完成以后,通过浏览器以及URL就可以查看运行结果了。接下来运行项目,使用命令“python manage.py runserver -r -d”运行,其中“-r”是“reload”的意思,“-d”是“debug”的意思;然后在浏览器中输入http://127.0.0.1:5000/,运行结果如图所示。

用户管理

用户管理是管理所有注册和登录本系统的用户信息,对用户的登入退出进行验证管理,以确保安全。

Ø 用户注册

用户登录/注册是每个系统必备的功能,接下来讲解用户注册模块的实现。

1.视图设计

前端模板和表单完成之后,通过后台视图函数控制就可以将所有注册的功能实现,接下来讲解注册模块的视图函数实现。

上述代码是用户注册模块的实现。第1行是配置函数register()的路由。第2~15行是整个注册模块的后台实现代码。第3行是创建RegisterForm注册表单对象form。第4行判断表单是否提交,已提交执行下面代码。第5~6行是创建用户对象,将提交的form.username.data赋值给username,form.password.data赋值给password,form.email.data赋值给email。第7行是将对象添加到数据库。第8行是因为激活邮箱时需要包含用户信息的token,因此手动提交用户对象。第9行是生成激活邮件的token。第11~12行是调用send_email()函数发送邮件。第13行是flash的提示信息。第14行是重定向到蓝本main中的首页。第15行是当还没提交注册表单时渲染注册页面。

2.注册模块运行结果

将注册模块中的内容都完成以后,通过浏览器以及URL就可以查看运行结果了。接下来运行项目,使用命令“python manage.py runserver -r -d”运行程序,然后在浏览器中输入http://127.0.0.1:5000/user/register/,运行结果如图所示。

3.邮件发送激活实现

邮件发送激活包含两部分内容,一部分在user.py文件中,一部分在email.py文件中。接下来详细讲解邮件发送与激活的实现。

user.py

上述代码是判断用户邮箱是否激活的实现。第2行是配置函数activate()的路由。第4行是判断用户“token”是否激活,激活则执行下面代码。第5行是用户激活后flash的提示信息。第6行是将URL重定向到蓝本user的登录页面。第8~9行是当用户“token”没被激活时的执行代码。第8行是用户激活失败的flash提示信息。第9行是将URL重定向到蓝本main的首页页面。

用户激活判断已经完成,接下来讲解邮件发送的实现。

email.py

上述代码是邮件发送的实现。第1~3行是实现在应用上下文中发送邮件的函数。第2行是发送邮件必须在上下文中。第3行是发送邮件。第5~15行是封装发送邮件函数,需要创建新线程执行发送。第6行是根据代理对象current_app找到实例化的app对象。第7~8行是邮件的内容。第9行是邮件的HTML文件渲染。第10行是邮件的主体内容即文本文件。第12行是创建发送邮件的线程。第14行是启动发送邮件的线程。第15行是返回线程。

4.最终运行结果

注册模块以及邮件激活内容完成以后,可以进行注册测试即运行整个注册模块,运行程序并在浏览器中输入http://127.0.0.1:5000/user/register/,然后输入用户的注册信息,如图所示。

在图中,单击【立即注册】,显示结果如图所示。

接下来登录注册所填写的邮箱,单击最新邮件信息,邮件信息如图所示。

单击图中的【激活】按钮,显示结果如图所示。

单击图中的【继续访问】按钮,跳转到博客系统的登录界面,显示结果如图所示。

用户登录

Ø 用户登录

在上一节的内容中已经将用户“qianfengjiaoyu”注册成功,并成功跳转到登录界面,然后直接输入用户名和密码提交到后台验证,验证成功之后就可以跳转到网站的主页面。接下来讲解用户的登录功能。

1.用户登录视图函数设计

上述代码是用户登录的实现。第2行是配置函数login ()的路由,并指定参数“method”的值为[‘GET’,‘POST’]。第4行是创建登录表单对象form。第5行是判断用户是否提交表单。第6~13行是用户提交表单之后执行的代码。第6行是以用户名为基准查询用户数据。第7行是判断是否存在该用户。第8行是当用户不存在时flash的提示信息。第9行是判断密码是否正确。第10~13行是用户名与密码均正确时执行的代码。第10行是“记住我”功能的实现。第12~13~行是将 URL重定向到下一页或蓝本main的首页。第15行是当密码不正确时flash的提示信息。第16行是渲染用户登录界面。

2.运行结果

将用户登录中的内容都完成以后,通过浏览器以及URL就可以查看运行结果了。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/user/ login/,并输入登录信息之后的运行结果如图12.12所示。

单击图中的【立即登录】按钮,显示页面如图所示。

3.用户退出

用户登录之后需要切换账号或者退出网站时,需要提供用户退出功能,接下来讲解用户退出功能实现。

上述代码是用户退出的实现。第1行是配置函数logout()的路由。第3行是调用系统内置的退出函数。第5行是将URL重定向到蓝本main的首页。

4.用户退出运行结果

将用户退出中的视图函数编写完成之后,运行程序并登录网站,运行结果如图所示。

单击图中的【退出】按钮,运行结果如图所示。

Ø 用户信息展示

本系统提供了用户信息展示功能,即用户详情接口。用户可以通过用户详情接口查看自己的相关信息,接下来详细讲解用户详情功能的实现。

1.视图设计

上述代码是用户详情的实现。第2行是配置函数profile()的路由。第4行是将当前用户的头像URL赋值给变量“img_url”。第5行是将当前用户的头像URL渲染到用户详情显示页中。

2.运行结果

将用户详情中的内容都完成以后,通过浏览器以及URL就可以查看运行结果了。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/user/profile/,运行结果如图所示。

在图中,用户名、邮箱信息都是以只读形式展示的,无法编辑。

Ø 用户信息修改

随着时间的推移,用户的信息可能会发生变化,因此需要提供用户信息修改的功能。本系统主要设计了三个方面的用户信息修改,分别是修改密码、修改邮箱、修改头像。接下来详细讲解这三部分内容的实现。

1.修改密码

大家在银行办理银行卡后,需要设置密码,但当设置好后会有提示告知:为保证账户安全,请每隔一段时间修改一次密码。而在网站中也会出现类似的安全问题,因此接下来讲解修改密码功能实现。

(1)视图设计

上述代码是用户修改密码的实现。第2行是配置函数editpw()的路由。第4行是创建修改密码的表单对象。第6行是判断用户输入的原始密码是否正确,若正确则执行第7行代码。第7行是将提交的新密码赋值给当前用户的密码变量“current_user.password”。第8行是将修改之后的密码更新到数据库中。第10行是将URL重定向到蓝本user的登录界面。第12行是用户输入的原始密码错误时执行的代码。第13行是渲染修改密码页面。

(2)运行结果

将修改密码中的内容都完成以后,通过浏览器以及URL可以查看运行结果。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/user/editpw/,并输入原始密码和新密码,运行结果如图所示。

单击图中的【确定】按钮,跳转到登录界面,如图所示。

2.修改邮箱

当用户常用的邮箱更换时,本系统也可以提供修改,只需要再次激活即可。接下来讲解修改邮箱功能的实现。

(1)视图设计

上述代码是用户修改邮箱的实现。第2行是配置函数editemail()的路由。第4行是创建修改邮箱的表单对象。第6行是生成token并赋值给变量“token”。第7~8行是发送邮件给新邮箱。第11行是将修改之后的邮箱赋值给当前用户的邮箱变量“current_user.email”。第12行是将当前用户的激活状态置为False。第13行是将修改后的邮箱信息更新到数据库中。第14行是将URL重定向到蓝本main的首页。第15行是渲染修改邮箱界面。

(2)运行结果

将修改邮箱中的内容都完成以后,通过浏览器以及URL可以查看运行结果。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/user/editemail/,并输入新邮箱,运行结果如图所示。

单击图中的【确定】按钮,跳转到首页,显示结果如图所示。

其余运行结果及操作与注册时的邮件激活相同,此处不再赘述。

3.修改头像

随着对新事物的接触,很多用户都会更换自己的头像来凸显自己跟随潮流,因此修改头像可以说是一个非常重要且不可缺少的一个功能。接下来详细讲解修改头像功能的实现。

(1)视图设计

上述代码是用户修改头像的实现代码。第2行是配置函数icon()的路由。第4行是创建修改头像的表单对象。第6~7行是生成随机头像名。第6行是将用户提交的文件名赋值给变量“suffix”。第7行是调用生成随机数函数,生成一个随机字符串再加上变量“suffix”的值作为最终的文件名,并赋值给变量“filename”。第8行是保存上传的文件。第9~10行是拼接上传的文件路径。第11~13行是生成上传头像的缩略图并再次保存。第11行打开文件内容,并将文件内容赋值给变量“img”。第12行是重新定义图片的大小。第13行是再次保存图片。第15行是判断当前用户的头像是否是默认头像,若不是则执行下面代码。第16~18行是将原来的头像删除。第20行是将文件名赋值给当前用户的头像变量“current_user.icon”。第21行是将文件保存在数据库中。第24行是将头像的URL赋值给变量“img_url”第25行是渲染修改头像页面。

(2)随机数生成函数

上述修改头像功能的实现,使用了随机数生成函数,接下来详细讲解随机数生成函数的实现。

上述代码是用户修改邮箱的实现代码。第3行是引入random模块。第4行是定义基础数据即随机数从变量“base_str”中随机抽取。第5行是将生成的随机数返回。

(3)运行结果

将修改头像中的内容都完成以后,通过浏览器以及URL可以查看运行结果。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/user/ icon/,运行结果如图所示。

单击图中的【浏览】按钮,选择相应头像,如图所示。

博客管理

博客系统中主要分为两部分的内容,一部分是用户管理;另一部分就是博客的管理,本节主要包括发表博客、收藏博客、“我的博客”展示、删除博客四部分内容。接下来详细讲解这四部分内容的实现。

Ø 发表博客

博客发表的功能在首页管理的视图函数中已讲解,接下来展示发表博客的运行结果。登录后并进入网站首页,并填写博客内容,运行结果如图所示。

单击图中的【发表】按钮,显示结果如图所示。

Ø 收藏博客

大家在博客上看到比较喜欢的博客都会进行收藏,接下来讲解博客的收藏功能实现。

1.视图设计

上述代码是收藏博客的实现。第2行是定义函数collect()的路由。第5行是判断用户是否收藏过这个博客,若收藏过则执行第7行代码。第7行是取消收藏。第10行是收藏博客。第11行是返回结果“ok”。

2.运行结果

将收藏博客中的内容都完成以后,通过浏览器可以查看运行结果。接下来运行程序,然后进入网站首页并登录,运行结果如图所示。

单击图中博客对应的【收藏】,显示结果如图所示。

Ø “我的博客”展示

在登录网站之后,可通过接口来对自己发表的博客进行查看并操作,接下来讲解“我的博客”展示。

1.视图设计

上述代码是“我的博客”的实现。第1行是定义函数myposts ()的路由。第3行是创建博客表单对象。第4行是读取页数信息。第5~7行是按需求进行分页查询博客并赋值给变量“pagination”。第8行将分页内的博客信息赋值给变量“posts”。第9~11行是渲染“我的博客”页面。

2.运行结果

将“我的博客”展示中的内容都完成以后,通过浏览器以及URL可以查看运行结果。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/posts/myposts/7,其中最后数字“7”是当前用户的id,运行结果如图所示。

Ø 删除博客

博客的内容可能会过时或者自己不想展示时,可以将博客删除,接下来讲解删除博客内容。

1.视图设计

上述代码是删除博客的实现。第2行是定义函数delpost()的路由。第3行是创建博客表单对象。第4行是通过博客id查找博客然后赋值给变量“p”。第5行是判断“p”是否存在,存在则执行下面代码。第6行是删除博客“p”。第7行将URL重定向到('posts.myposts',uid=uid)。第8行是当博客不存在的时候执行,返回“无此博客”。

2.运行结果

将删除博客中的内容都完成以后,通过浏览器以及URL可以查看运行结果。接下来运行程序,然后在浏览器中输入http://127.0.0.1:5000/posts/myposts/7,其中最后数字“7”是当前用户的id,运行结果如图所示。

查询需要删除的博客,并单击【删除】,显示结果如图所示。

单击【确定】之后,显示结果如图所示。

小结:Python Web开发—Flask实战—项目概览及准备、页面设计、表单管理、首页管理、用户管理、博客管理

主要讲解使用Flask框架完成博客系统的实现,其中包括项目概念及准备、页面设计、表单管理、首页管理、用户管理、博客管理六部分内容。对于本章内容,大家要跟着项目的内容编程,并在编程过程中勤思考,开阔思维,最终达到独立使用Flask框架编写网站系统。



关键词:管理,设计,实战,项目

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭