《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)

目录

前言

8章 用户认证

9章 用户角色

10章 用户资料

11章 博客文章

12章 关注者

13章 用户评论

14章 应用编程接口

 

 


前言

第1章-第7章学习实践记录请参见:《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

 

本文记录自己学习《Flask Web开发——基于Python的Web应用开发实践》的第8章-第14章内容。相比于刚开始学习第1-7章内容来说,本部分内容实战性更强,而且在书本上遇到的问题也相对较少,如果认真弄懂前7章内容的话,本部分内容相当于是对前7章内容的具体实践,学习也很轻松。

 

首先说明一下本部分项目示例实现了哪些功能?

  • 用户角色:普通用户、管理员
  • 具体功能:登陆、注册、发布文章、编辑文章、用户间关注、用户评论、修改个人信息、管理用户评论、MarkDown显示文章格式。

下图中所示为一个管理员角色登陆系统各部分功能图片动态图:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第1张图片

我自己上机演练代码:(PS:和作者GitHub上代码有些许区别)

 

 


8章 用户认证

1.书本79页密码散列功能shell测试有bug

如果学完第7章,并按照71页manage.py中写入启动脚本代码,在控制台输入python manage.py shell会报以下错误:TypeError: : 'dict' object is not callable

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第2张图片

 

解决办法如下图:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第3张图片

 

紧接着,如果还是安装书本上命令提示输入命令,会报以下错误:Traceback (most recent call last):File "", line 1, in

解决办法见下图:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第4张图片

 

2.书本87页用shell插入新用户数据有bug

本问题在于数据库设计含有外键,直接按照书中插入代码,未插入用户角色外键,是无法插入数据的。

解决办法:删除User表和Role表之间的多对一关系

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第5张图片

 

然后,删除项目中所有**.sqlite文件和migrations文件夹,具体如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第6张图片

 

然后按照下图所示三步,重新创建数据库(PS:此处方法见第5章5.11节):

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第7张图片

 

这些处理完毕后,依照书上插入代码,依旧会报找不到User和db错误,解决办法如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第8张图片

 

完成以上数据插入任务后,在CMD控制台输入python manage.py runserver开启服务,浏览器中输入http://127.0.0.1:5000/auth/login,然后用插入的邮箱号和密码进行登陆,会得到如下结果:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第9张图片

 

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第10张图片

 

 

3.书本89页实际运行结果(PS:经验证,数据可以注册成功)

 

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第11张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第12张图片

 

4.书本92页执行一个新的数据库迁移

在CMD窗口中,依次输入python manage.py db migrate -m “the second migration”、python manage.py db upgrade命令,具体执行以及得到结果如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第13张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第14张图片

 

5.书本94页示例8-22代码因为Flask-Login版本问题出现如下图所示bug

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第15张图片

 

解决办法见下图:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第16张图片

 

让我疑惑的是,我写笔记时看的是实体书,上面代码有问题,下面截图的是电子书,上面却是正确的>~<,具体如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第17张图片

 

问题解决方案网址(https://segmentfault.com/q/1010000004041497)

测试is_authenticated方法如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第18张图片

 

附加书本95页页面运行结果:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第19张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第20张图片

 

 

出现上图的原因:

花了一个多小时找错,结果发现是自己照着书本83页敲示例8-8代码时少了return语句,直接写User.query.get(int(user_id)),具体如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第21张图片

 

解决来源(https://github.com/maxcountryman/flask-login/issues/302):

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第22张图片

 

运行成功界面如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第23张图片

 

下面是我自己修改数据库数据中邮箱验证属性为True时显示结果(PS:主要在于邮箱验证时需要申请临时密码,所以就没填写具体邮箱数据,直接手动改写后台数据库中数据):

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第24张图片

 

注:第8章主要讲解了如何使用Flask框架实现用户登陆、注册功能,以及使用邮箱进行用户注册确认以及密码修改确认等。感觉第8章内容就是对书本前7章内容的一次综合练习,所有使用的技术点都可以在前7章中找到。所以,个人感觉只要踏实把第8章所有代码以及实现思路弄懂,才算是刚刚入门Flask框架。

 

 


9章 用户角色

1.书本99页使用shell会话把角色写入数据库问题

由于在第8章实现过程中,我把Role表和User表之间的外键关系给删除了,如果在这章不重新回复两表之间的关系就无法实现用户角色的功能。所以,在这种情况下,我又得要把数据库重新初始化、迁移和创建。之所以这么做,而不是直接进行迁移和创建,是因为我在直接进行迁移和创建的过程中,报错:default属性在框架中已经存在,无法创建新的Role表,这个错误没有解决,由于初学,无奈,直接删除migrations文件夹和生成的data-dev.sqlite数据库文件,重新进行初始化、迁移和创建,发现一切OK。具体如下:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第25张图片

 

好了,既然Role表和User表之间有了一对多而存在的外键关系,那注册功能插入用户数据时,必须得要确认用户角色,否则无法插入。

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第26张图片

 

刚刚进行了注册测试,竟然不用确定用户角色,也可以插入成功。这样的感觉违背了我学习数据库的理论知识啊,之前第5章,进行插入数据时,行不通,现在好了。估计是之前学习时,代码有点bug。

 

注:本章相当于主要在讲数据库的知识,和本书核心Flask框架的知识点联系不大,其中核心思想就是定义权限来分配角色等级。一个用户有的只有一种权限,有的可以有多种权限。权限的分配很灵活,这样处理操作大大简化了数据库的设计难度,也提高了数据的条理性。

 

 


10章 用户资料

1.书本105页、107、109页和112页操作运行结果

此处按照书本上的代码讲解,进行编写代码操作,其中遇到的问题在前面均已遇到过,所以到了此处基本没啥难点。按照书本讲解,运行结果具体如下:

用户简介页面

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第27张图片

 

普通用户修改个人信息界面

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第28张图片

 

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第29张图片

管理员修改个人信息界面

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第30张图片

 

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第31张图片

 

显示用户头像的资料页面

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第32张图片

 

 

 

注:本章主要实现博客系统普通用户和管理员角色的个人信息编辑功能实现,此处实现没有什么技术亮点和难点,只要认真完成书本前述部分,这部分功能完全没有障碍。

 

 


11章 博客文章

1.有关书本119页示例11-8代码

本部分代码在作者GitHub上没有示例代码,即如果要实现导入虚拟数据测试功能,只能自己一个代码一个代码敲。不过,这个也太多了点,一个字母出错就要改错>~<。从作者GitHub上直接克隆下来的代码,虽然没有示例代码,但是应该是作者更新代码后,在此处换了另一种实现方式,因为在项目文件中出现了一个新的fake.py文件,该文件中代码和示例11-8代码基本类似。

 

2.书本117页、123页、125页和130页操作运行结果

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第33张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第34张图片

 

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第35张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第36张图片

 

注:本章是对博客系统功能的扩展,主要实现用户编辑发送博客文章,其中还可以使用MarkDown来实现对文章的编辑。功能具体实现参照书本的代码讲解即可,基本不会遇到什么较难的问题。

 

 


12章 关注者

1.书本137页和142页实际运行结果

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第37张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第38张图片

 

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第39张图片

 

 2.操作完第12章代码后,如果选择用户退出,可能会出现以下bug:AttributeError: 'AnonymousUser' object has no attribute 'followed_posts'

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第40张图片

 

解决办法,在models.py文件中找到AnonymousUser类,在这个类中添加一个方法,具体代码如下:

@property
def followed_posts(self):
    return Post.query.join(Follow, Follow.followed_id == Post.author_id) \
        .filter(Follow.follower_id == None) 

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第41张图片

 

注:本章具体实现部分的难点是关注用户记录的数据库表的设计,即多对对关系会生成一张中间表。其它部分,按照书本上的代码来上机操作,基本不会遇到什么难点。

 

 


13章 用户评论

1.书本148页和151页实际上机运行结果

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第42张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第43张图片

 

 

注:本章主要实现博客的用户评论功能,以及添加了一个协管员权限,具体实现没有什么难点,按照书本的代码上机操作即可。

 

 

 


14章 应用编程接口

1.书本168页测试打印结果

此处具体操作需要先在CMD中打开服务,才能获取api中数据。(PS:推荐一篇博客:http://blog.csdn.net/huang5487378/article/details/60778293)

运行结果:

 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第44张图片

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)_第45张图片

 

 

 

你可能感兴趣的:(python,数据库,shell)