前言 style="font-family: 宋体;">第1 style="font-family: 宋体;">章 安装 style="font-family: 草书;">第2 style="font-family: 黑体;">章 程序的着力构造 style="font-family: 宋体;">第3 style="font-family: 宋体;">章 模板 style="font-family: 宋体;">第4..." />

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

目录

style=”font-family: 宋体; font-size: 14pt;”>前言

style=”font-family: 宋体;”>第1 style=”font-family: 宋体;”>章
安装

style=”font-family: 草书;”>第2 style=”font-family: 黑体;”>章
程序的着力构造

style=”font-family: 宋体;”>第3 style=”font-family: 宋体;”>章
模板

style=”font-family: 宋体;”>第4 style=”font-family: 宋体;”>章 style=”font-family: Calibri;”>Web style=”font-family: 宋体;”>表单

style=”font-family: 宋体;”>第5 style=”font-family: 宋体;”>章
数据库

style=”font-family: 钟鼓文;”>第6 style=”font-family: 行书;”>章
电子邮件

style=”font-family: 陶文;”>第7 style=”font-family: 草书;”>章
大型程序的社团

 

 


前言

学习Python也有一个半月时间了,学到现在倍感依然始于入门阶段,假诺不借助网上Demo资源,几乎不可以和谐写出有关称心的东西。近年来感觉自己或者有点退步啊,学的太慢了点。首要感觉仍然要好刚先河上学时有点浮躁,一心求快,看资料时最初都是任何吞枣。

 

刚起先买了一本《Python基础教程
第2版》,大约花了10天看完,起先摸底了Python语法相关特性以及咋样链接后台数据库。那时,看完后又买了《Python
Web开发实践》和《Flask
Web开发——基于Python的Web应用开发执行》。然后,花了5天时间把《Flask
Web开发——基于Python的Web应用开发执行》看了一次,之所以这样快,是因为看到了第八章时,发现代码有点弄不懂,而且从作者GitHub上克隆下来的代码运行还有Bug,所以采取了快速看完了背后几章,大概明白一下实现思路。然后,初步看《Python
Web开发实践》,发现那本书的要求好高啊,初学者想看懂它,花的时光未曾两三周还搞不定(PS:紧如果其中讲的强调经验,没有进行项目),于是也选用了4天时间起首浏览了一次。到了这边,我起来采取看网络教程,把廖雪峰先生的Python教程从基础部分一章一章上机实践操作了一回(PS:最终的花色实战没操作),那多少个也大都花了8天时间。前边又花了5天时间在网上找了几篇高质地关于利用Flask+MySQL实现用户登陆注册效用的Demo。到此,感觉对于Python基础明白的更好了少数。发现学技术,尤其是新技巧,要实在,求稳。

 

由此,我采取了重复再看三回《Flask
Web开发——基于Python的Web应用开发执行》,并力争把书中每一个演示运行出来,假诺发现Bug,就化解。在这一趟学习过程中,发现有关Flask的中文学习资源大规模没有英文高,而且有关技术学习书本都是英文版翻译过来的。翻译过来的题目就是,书已经出版了两三年,有些模块库更新,导致书中代码实际就不可能运行,还加上作者自己立即的一线错误没跟新。

 

本文先上传第1章到第7章的读书实践记录(PS:第8-14章见《Flask
Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)
),近日本人也是重复学到了此间。如若有学过Flask的长辈路过,有什么样好的求学资源引进,不甚感激。

 

叨叨絮絮有点多,本文重要内容就是记载自己在读书《Flask
Web开发——基于Python的Web应用开发实践》时,上机运行相关示例遭逢的坑以及一些心端庄会,希望对于其它初学Flask的同校有点援救。

 

附:《Flask
Web开发——基于Python的Web应用开发执行》笔者博客作者网络教程版笔者本书GitHub代码链接

本书封面

图片 1

 

 

 


第1章 安装

本有的内容安装书上内容一步一步来操作,很简短,基本不会现出问题。

注:本章重要教会初学者,怎么着设置虚拟环境。使用虚拟环境一段时间后,会发觉学习Python,使用虚拟环境真的是很强劲,可以避免Python解释器中包的紊乱和版本的争持,而且还不需要依靠管理员权限。

 

 


第2章  程序的为主组织

1.书本15页上边第二段代码:

 图片 2

 

上图中所示问题自己特意查看了弹指间有关load_user()方法的调用及其职能,官方文档写明如下:

您需要提供一个
user_loader 回调。那多少个回调用于从会话中贮存的用户 ID
重新加载用户对象。它应该接受一个用户的 unicode
ID,并赶回相应的用户对象。 例如: 
@login_manager.user_loader 
def
load_user(userid): 
    return
User.get(userid) 
假如 ID
无效,它应当回到 None ( 而不是抛出相当 )。(在这种情形下,ID 会
被手动从会话中移除且处理会继续。) 

 

2.书本16页左上角示例错误更改(PS:此处问题应当是包版本升级导致,可是作者关于该项目github上源码已履新):

 图片 3

 

此处错误,在延续章节中,现身仿佛flask.ext.**均修改为flask_**即可。

 

注:通过第2章,让自家概括询问了Flask框架的骨干使用模式。其中关键在于路由和视图函数的落实以及怎么样启动服务器,难点在于请求钩子概念的了解,我把这段概念反复看了少数遍,也只可以了然讲解的文字表面意思,关于什么利用依旧是一头雾水。

 

 


第3章 模板

按部就班书本上所述,一步一步举办操作,即可获取如下运行结果:

 图片 4

图片 5

图片 6

 

此间要留心一点就是,直接从GitHub上克隆出的代码,直接运行hello.py文件是杯水车薪的。需要在hello.py文件最终面添加如下两行代码:

if __name__ == '__main__':
    app.run(port = 8000,debug = True)

 

上述代码意思是,打开Flask自带服务器,开启端口是8000,且处于调试形式。

 

注:第3章内容并未困难,认真看一下书上解释,很快就能弄懂相关代码意图。本章重点介绍了Jinja2模板引擎的行使(PS:此处提议初学者到网上看一下Jinja2的开支文档,加深通晓),以及Flask-Bootstrap和Flask-Moment模块的采取办法,感觉有所功用都是早已写好的,只管调用即可,很方便。

 


第4章 Web表单

1.书本34页示例4-2代码更新(PS:引入包也要改成from
flask_wtf import Form,后续章节一样):

 图片 7

 

Class
wtforms.validators.DataRequired(message=None)
此验证器将会检测field是否输入了数值,实际上是拓展了if
field.data操作。并且,如数数据是一个字符串,那么只包含空格的字符串将会被认为是False。
参数:message-当验证退步时再次回到的谬误信息数:message-当验证失败时回来的荒谬信息。

此间作者GitHub上已履新。具体运用原理可以查阅Flask-WTF开发文档

 

2.看望学习本章内容实在运作效果图:

 图片 8

 

注:本章内容根本教学了Flask-WTF的运用,此处强烈提出初学者先看一下Flask-WTF的开支文档,再来举办第四章的上学,这样敞亮会愈发深远一点,学的也会更快一些。

除了,还详细介绍了重定向和用户会话效率:紧假设Post/重定向/Get格局,通过重定向实现了页面刷新仍旧可以记住在此之前请求的数额,使得网页功能更加人性化和智能化。

末段,就是Flash信息效能的利用,通过此效率结合Flask-BootStrap包,在网页上举行连锁指示操作简直是健全。

本章节从作者GitHub上下载的代码均是修过正的,然而书本是2014年出版,相关错误以及代码更新部分需注意即可。

 

 


第5章 数据库

1.书本47页示例5-1代码部分有bug,按照书本后续讲解举行操作会报以下错误:

 图片 9

 

按照报错提醒,需要在app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN’]

True该行代码下添加如下一行代码:app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’]
= False

 图片 10

 

SQLALCHEMY_TRACK_MODIFICATIONS:如若设置成True(默认情况),Flask-SQLAlchemy
将会追踪对象的改动并且发送信号。这需要分外的内存,
尽管不必要的可以禁用它。倘若您不显得的调用它,在新型版的运转环境下,会显得警告。

 

2.书本50页5.8.1创制表,图中显得的操作符应该是在Mac或者Linux环境下进展的下令操作,假设是在Windows环境下,是达不到效果的,具体如下:

 图片 11

 

具体操作方法如下(WIndows版本):

 图片 12

此地咋样要遵从书本上命令达到效果,可以参考第2章有关Flask-Scrip包的任课,设置manager变量,然后就足以直接打开shell举行有关操作。

 

3.书本50页5.8节数据库操作部分示例运行结果

 图片 13

图片 14

 

 4.图书55页示例5-5部分关于操作数据库部分代码有问题

 图片 15

那里之所以这样修改代码,是因为计划的数据库角色和用户是一对多的关系,用户表中包含一个角色id外键。在对用户表举行扦插操作时,必须要认同一个用户角色,否则无法插入。

附运行成功页面截图:

 图片 16

 

5.书本57页有关Flask-MIgrate相关配置命令咋样科学贯彻问题

只要纯粹安装书本代码来举行连锁命令操作,会意识输入python
hello.py db
init命令根本没有出口任何提醒音信,即不可以打响创立迁移仓库。假使从笔者GitHub上克隆下来的代码,直接举行此命令操作,也是从未任何音信提醒。此处需要在hello.py文件最后面,加上如下两行代码(PS:作者最新修改代码,未定义manager变量,此处需要查阅第2章有关Flask-Script包讲解,自己定义好manager变量):

if __name__ == '__main__':

    manager.run()

 

再去决定台输入相关命令,即可实现相关操作,操作成功结果如下(PS:此处推荐一篇博客著作https://www.cnblogs.com/caicairui/p/7821586.html):

 图片 17

 

 

6.关于使用MySQL数据库实现相关增删查改操作问题

假如认真看完第5章内容,转用MySQL数据库实现增删查改操作异常简单,仅仅只需要把定义数据库URL地址改一下就足以,其他部分代码均不需要转移。具体修改如下:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/test_flask'
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir,'data.sqlite')

 

上述代码意思,使用用户名和密码均为root的mysql数据库账号,进入曾经创办好的test_flask数据库,举办相关表的创造以及数据的增删查改操作。自处可以仔细看一下书本46页表5-1。

 

注:通过本章的读书,让我基本精晓了何等运用Flask-SQLAlchemy有关职能,以及贯彻对关系型数据库SQLite、MySQL的增删查改操作,最后最重大的就是学会了接纳Flask-Migrate落实数据库迁移。为了可以较好的了然和左右第5章内容,指出初学者认真看一下Flask-SQLAlchemy和Flask-Migrate的法定文档。

 

 


第6章 电子邮件

1.书本60页发送邮件示例

由于书本上使用googlemail邮箱,一般国内同学都不会利用这些邮箱。大部分都会接纳QQ邮箱吧。此处只需要把设置写成app.config[‘MAIL_SERVER’]

‘smtp.qq.com’,即把电子邮件服务器主机名中间的googlemail换成qq就行啊。

成功这么些,假若单独使用自己的QQ邮箱号和QQ密码登陆发送邮件的话,会报以下错误:

smtplib.SMTPSenderRefused:
(503, ‘Error: need EHLO and AUTH first !’, u’****’…)

解决办法(PS:此处关于QQ邮箱和登陆密码我是从来写在代码里的,没有用环境变量获取):
跻身自己的QQ邮箱,完成如下设置操作:

 图片 18

图片 19

 

 

发送邮件测试代码(PS:下面获得QQ邮箱测试登陆临时密码有点坑的是,发送完短信后,可能30秒后浏览器上打开的QQ邮箱界面直接崩溃,然则这没提到,崩溃后也仍是可以够发送邮件):

 图片 20

 

发送成功后的截图:

图片 21

 

 

 2.至于61页在先后中合拢发送电子邮件效用

小心此处要整合第5章数据库效能,所在此以前提要规定在运行成功的页面上可知行得通地把数据插入后台数据库。其次,要专注的是在templates文件下要团结出手新建一个mail文件夹,并在这一个文件夹里新建new_user.txt和new_user.html六个文本文件,这样才能真的落实邮件发送效率。(PS:new_user.txt、new_user.html文件中情节,请查看从作者GitHub上克隆下来的代码)

运作成功结果页面如下(PS:此处实现效益取得邮箱消息,我都是平昔写在代码中的,未利用环境变量获取):

 图片 22

图片 23

 

注:本章紧要教学了Flask-Mail的使用,效能使用不难,首如果关联邮箱发送邮件时登陆需要有关服务器许可的布置问题不怎么麻烦。然而,全体来说,本章的采取,也从一边来看了Python的魅力,简单的几行代码即可兑现部分相比复杂的意义。

 

 


第7章 特大型程序的布局

1.书本66页示例7-2代码有bug

那里假设完全依据书本上代码,到了持续上机运行时会报以下错误:

E:\WorkPlace\Git_python\liu_demo\venv\lib\site-packages\flask_sqlalchemy\__init__.py:794:
FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant
overhead and will be disabled by default in the future.  Set it to True
or False to suppress this warning.

此间需要充分一行代码,如下图:

 图片 24

 

Flask-SQLAlchemy配置键有关职能定义:

SQLALCHEMY_DATABASE_URI

用于连接数据的数据库。例如:

  • sqlite:////tmp/test.db
  • mysql://username:password@server/db

SQLALCHEMY_BINDS

一个映射绑定 (bind) 键到 SQLAlchemy 连接 URIs 的字典。 更多的信息请参阅 绑定多个数据库

SQLALCHEMY_ECHO

如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。

SQLALCHEMY_RECORD_QUERIES

可以用于显式地禁用或者启用查询记录。查询记录 在调试或者测试模式下自动启用。更多信息请参阅 get_debug_queries()

SQLALCHEMY_NATIVE_UNICODE

可以用于显式地禁用支持原生的 unicode。这是 某些数据库适配器必须的(像在 Ubuntu 某些版本上的 PostgreSQL),当使用不合适的指定无编码的数据库 默认值时。

SQLALCHEMY_POOL_SIZE

数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。

SQLALCHEMY_POOL_TIMEOUT

指定数据库连接池的超时时间。默认是 10。

SQLALCHEMY_POOL_RECYCLE

自动回收连接的秒数。这对 MySQL 是必须的,默认 情况下 MySQL 会自动移除闲置 8 小时或者以上的连接。 需要注意地是如果使用 MySQL 的话, Flask-SQLAlchemy 会自动地设置这个值为 2 小时。

SQLALCHEMY_MAX_OVERFLOW

控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。

SQLALCHEMY_TRACK_MODIFICATIONS

如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。

 

加上方面一行代码后,再一次去CMD举行有关命令操作,发现运行正常化,结果如下:

 图片 25

2.书本74页成立数据库示例运行结果

 图片 26

图片 27

 

注:第7章内容初看很粗略,不重大,然则只要不密切看懂每一个配备步骤以及相关代表意义,会意识学习前面章节,很难读懂有关代码。本章最关键的一对,得读懂7.2布局选项中config.py实现配置的现实形式,以及程序是如何调用那个设置好的配置。最后,需要留意的就是学会7.4起步脚本中manage.py代码具体内涵,因为写好的主次是否健康打开服务,一般都是通过这段代码来落实,说白了这里原理如故要回到第2章有关Flask-Script模块的讲课(PS:即有关使用manage.run()间接开启系统服务)。

 

说到底,附加一份本身要好学习前7章内容上机代码,都是依据书本上一行代码一行手动敲进去的,出现错误再修改,本有的代码和作者GitHub上最新版代码有稍许不比。

现实代码链接

 

网站地图xml地图