《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上最新版本代码来些许例外。

切实代码链接