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

目录

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

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

style=”font-family: 小篆;”>第壹 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: 陶文;”>第五 style=”font-family: 草书;”>章
电子邮件

style=”font-family: 宋体;”>第七 style=”font-family: 黑体;”>章
大型程序的协会

因为另有付出记录工具最新没怎么在 cnblog
写开发备忘.不过小编觉着这几个是个相比严重的难题,觉得有要求让越来越多的人明白处理办法,所以在
cnblog 也放上一篇希望广为传播.

 

因为前日网络上vs二零零六能直接使用的版本很难找,所以放三个改动自 sourceforge
能用的本子,并且证实修改的方式.

 



第四回修改

前言

上学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的粤语学习财富大规模没有英文高,而且有关技术学习书本都是英文版翻译过来的。翻译过来的题材就是,书已经出版了两三年,有个别模块库更新,导致书中代码实际就不能够运作,还添加小编自个儿登时的轻微错误没跟新。

 

正文先上传第壹,章到第九,章的学习实践记录(PS:第拾,-14章见《Flask
Web开发——基于Python的Web应用开发实践》一字一板上机实践(下)
),方今自小编也是双重学到了此处。如若有学过Flask的前辈路过,有怎么着好的读书财富推介,不甚多谢。

 

叨叨絮絮有点多,本文主要内容就是记载本人在念书《Flask
Web开发——基于Python的Web应用开发实践》时,上机运营相关示例遇到的坑以及一些心得体会,希望对于任何初学Flask的同桌有点协理。

 

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

本书封面

图片 1

 

 

 



第1章 安装

本有的情节安装书上内容一步一步来操作,很简短,基本不汇合世难题。

注:本章主要教会初学者,怎样设置虚拟环境。使用虚拟环境一段时间后,会发觉学习Python,使用虚拟环境真的是很强劲,可以幸免Python解释器中包的繁杂和本子的冲突,而且还不须求依靠管理员权限。

 

 


NVelocity 那一个工具的使用相信半数以上网友都以因为和自个儿一样在 java 时使用的是
Velocity ,因而在应用 C# 特别希望有三个近似的工具包.而寻找拿到的就是
NVelocity.

第3章  程序的主干结构

1.书本15页下面第一段代码:

 图片 2

 

上图中所示难点自身尤其查看了一晃关于load_user()方法的调用及其职能,官方文档写明如下:

您需求提供三个user_loader 回调。那一个回调用于从会话中贮存的用户 ID
重新加载用户对象。它应当接受3个用户的 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_**即可。

 

注:通过第3章,让本身简单询问了Flask框架的大旨拔取格局。其中关键在于路由和视图函数的兑现以及哪些运转服务器,难题在于请求钩子概念的知道,作者把那段概念反复看了有些遍,也只好掌握讲解的文字表面意思,关于怎么着使用如故是壹头雾水。

 

 


NVelocity 两三年前自个儿是用过的,所以并不认为本次用会有怎样难题.
照例在网上搜索后插手工程及网上的种种示例就点运营.为料出现了 “It appears
that no class was specified as the ResourceManager…”
,心里也并不慌张,因为依据经验推断也等于有个别 dll 引用没弄进来.
结果折腾了各样文件和网上的各类例子就是不对.
不知不觉三个中午就过去了,觉得工作有点严重,放下马虎的心理,打开了自家之前的工程.发现有几个例外的地点:
1.以前集团用的是 vs二〇〇八 , 将来用的是 vs二零一零,不可以直接编译.

第3章 模板

依照书本上所述,一步一步举办操作,即可取得如下运转结果:

 图片 4

图片 5

图片 6

 

此处要专注一点就是,间接从GitHub上克隆出的代码,直接运维hello.py文件是没用的。需求在hello.py文件最前面添加如下两行代码:

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

 

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

 

注:第三章内容尚未困难,认真看一下书上解释,很快就能弄懂有关代码意图。本章重点介绍了Jinja2模板引擎的使用(PS:此处提出初学者到网上看一下Jinja2的付出文档,加深驾驭),以及Flask-Bootstrap和Flask-Moment模块的采用格局,感觉有所作用都以已经写好的,只管调用即可,很有益。

 


2.从前工程中唯有三个 NVelocity.dll 文件,也未尝源码,而本次下载的却有
NVelocity.dll,NVelocity.http.dll 及源码等多少个文件.

第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的开销文档,再来举行第5章的学习,那样驾驭会特别深厚一点,学的也会更快一些。

除去,还详细介绍了重定向和用户会话功用:主假使Post/重定向/Get形式,通过重定向完毕了页面刷新依然可以记住从前请求的数额,使得网页功效尤为人性化和智能化。

末尾,就是Flash音讯功用的使用,通过此成效整合Flask-BootStrap包,在网页上拓展有关指示操作简直是两全。

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

 

 


好呢,作者把那么些 NVelocity.dll
替换好了.但编译时即报错,查看了文件的版本新闻,其写明了是 for .net 4.0
的,当然那时直接换用 vs二零零六 就好了.然则自家的动静有点特殊,生产条件是 .net
2.0 的,不是太便宜令人升迁,再说升级 .net 环境有时候会变成灾祸 —
作者原先升级 .net 3.5 时遇见过很频仍,固然 .net 4.0
好很多.实在不想神经过敏.

第5章 数据库

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

 图片 9

 

行吗,又在网上寻找了成百上千的近乎难题.都不行.时期看到说因为 NVelocity
交由了怎么着 xxx 维护了,所以 NVelocity 的源码版本有八个.
这时意外在某网友的例证中发觉了能用的 .net 2.0 版本 NVelocity.dll
但其文件并未版本音信,明显不是法定的,但那位网友的稿子彰显是频仍转载已经找不到其如何修改的新闻了.作者下载的文件位于(NVelocity-0.4.2.8580):

依据报错提醒,要求在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

那边怎么样要依据书本上命令达到效果,可以参见第叁,章有关Flask-Scrip包的上书,设置manager变量,然后就可以直接打开shell举办连锁操作。

 

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

 图片 13

图片 14

 

 4.书本55页示例5-5部分有关操作数据库部分代码有毛病

 图片 15

此间之所以那样修改代码,是因为设计的数据库剧中人物和用户是一对多的关系,用户表中包括1个剧中人物id外键。在对用户表举办插队操作时,必须要认同3个用户脚色,否则不能插入。

附运维成功页面截图:

 图片 16

 

5.书本57页有关Flask-MIgrate相关配置命令如何正确贯彻问题

万一纯粹安装书本代码来拓展相关命令操作,会发现输入python
hello.py db
init命令根本未曾出口任何提醒新闻,即不能打响创办迁移仓库。如果从小编GitHub上克隆下来的代码,间接开展此命令操作,也是从未有过其它消息提示。此处必要在hello.py文件最末尾,加上如下两行代码(PS:小编最新修改代码,未定义manager变量,此处必要查阅第叁,章有关Flask-Script包讲解,本人定义好manager变量):

if __name__ == '__main__':

    manager.run()

 

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

 图片 17

 

 

6.有关使用MySQL数据库落成相关增删查改操作难题

如若认真看完第4、章内容,转用MySQL数据库完结增删查改操作非凡简单,仅仅只须求把定义数据库U景逸SUVL地址改一下就足以,其余一些代码均不要求改变。具体修改如下:

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落到实处数据库迁移。为了可以较好的敞亮和左右第陆章内容,指出初学者认真看一下Flask-SQLAlchemy和Flask-Migrate的官方文档。

 

 


http://nvelocity.sourceforge.net/

第6章 电子邮件

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

因为那是 google 搜索的第1、个,而 baidu 搜索的首先个就是不行 for .net 4.0
版本的:

鉴于书本上使用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页在先后中合拢发送电子邮件功用

留神此处要结合第4章数据库成效,所以前提要鲜明在运作成功的页面上可见使得地把数量插入后台数据库。其次,要小心的是在templates文件下要和谐入手新建三个mail文件夹,并在那一个文件夹里新建new_user.txt和new_user.html七个文本文件,那样才能真正贯彻邮件发送功效。(PS:new_user.txt、new_user.html文件中故事情节,请查看从小编GitHub上克隆下来的代码)

运行成功结果页面如下(PS:此处已毕效益得到邮箱音信,我都以一直写在代码中的,未使用环境变量获取):

 图片 22

图片 23

 

注:本章主要教学了Flask-Mail的运用,作用应用简单,主假如涉及邮箱发送邮件时登陆须求有关服务器许可的布局难题不怎么麻烦。但是,全部来说,本章的应用,也从另一方面来看了Python的魔力,简单的几行代码即可达成部分相比较复杂的功能。

 

 


http://nvelocity.codeplex.com/

第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.2配备选项中config.py完毕配置的切实可行办法,以及程序是如何调用这几个设置好的安插。最终,必要专注的就是学会7.4起动脚本中manage.py代码具体内涵,因为写好的程序是不是健康打开服务,一般都以经过这段代码来完毕,说白了那里原理照旧要回来第1、章有关Flask-Script模块的授课(PS:即有关使用manage.run()间接开启系统服务)。

 

说到底,附加一份本人自个儿攻读前7章内容上机代码,都是比照书本上一行代码一行手动敲进去的,出现谬误再修改,本有的代码和小编GitHub上风行版代码有个别许不一。

实际代码链接

 

而网友极度可用的 .net 2.0 版本已经远非下载地址了.说实话小编知道不了
sourceforge.net 
这几个怎么用持续,这么盛名的控件在那样闻明的网站上提供的文书居然是谬误的.通过自家查找的别的音讯,相应的
bug 应当是有人提交了的,不知为啥没有提交到 sourceforge.net 那里.

好了,不管那么多,至少在本人的汉语版本 vs二零一零上急需修改以下一些才能不奇怪使用:

文件 ResourceLocator.cs 中

            try
            {//clq
                foreach (Assembly a in assemblies)
                {
                    String prefix = a.FullName.Substring(0,
a.FullName.IndexOf(“,”)).ToLower();
                    String[] names = a.GetManifestResourceNames();
                    try
                    {//clq //那里都不错,应当是前方的两句话造成的
                    foreach (String s in names)
                    {

                        if (s.ToLower().Equals(fn) ||
s.ToLower().Equals(prefix + “.” + fn))
                        {
                            this.filename = s;
                            assembly = a;
                            isResource = true;
                        }
                    }
                    }
                    catch (System.Exception ex)
                    {
                        String s = ex.Message;
                        System.Console.WriteLine(“bbbbbb:” + s);
                    }//clq
                }
            }catch(System.Exception ex)
            {
                String s = ex.Message;
                System.Console.WriteLine(“aaaaaa:” + s);
            }//clq
            
        }//if clq

依照本身的测试大约的失误原因是,有个别财富文件在反射机制搜索时不支持有些接口,导致其分外退出了剩余能源的处理.所以直接加多少个try 就行了(ps:反射完结,可能成效不高吧).

这么改正后上面这样的代码就足以经过运维了.

            VelocityEngine vltEngine = new VelocityEngine();
            //4.0 这里是 RuntimeConstants.RESOURCE_LOADER
           
vltEngine.SetProperty(RuntimeConstants_Fields.RESOURCE_LOADER,
“file”);
            string path = _this.Server.MapPath(“~/”);
           
vltEngine.SetProperty(RuntimeConstants_Fields.FILE_RESOURCE_LOADER_PATH,
path);
            vltEngine.Init();//不修改库代码,那里会报错


第3处修改


如上修改后使用一段时间后,因为小编个人的工具链中很多是不支持 utf8
的(或然很麻烦),在此将模板改为了普通的 gbk
编码格局.那时发现那个本子无法矫正编码格局.我修改了一个地点才行.平常的编码校正代码为:

           
vltEngine.SetProperty(RuntimeConstants_Fields.OUTPUT_ENCODING,
“GB2312”);//修改 NVelocity-0.4.2.8580 的源码后才能用那七个,并且最好是用
GBK
           
vltEngine.SetProperty(RuntimeConstants_Fields.INPUT_ENCODING,
“GB2312”);//

在此版本 nvelocity 中不起作用,必要修改:

Template.cs 文件中

            //System.IO.StreamReader br = new System.IO.StreamReader(new
System.IO.StreamReader(is_Renamed,
System.Text.Encoding.GetEncoding(encoding)).BaseStream);
            System.IO.StreamReader br = new System.IO.StreamReader(new
System.IO.StreamReader(is_Renamed,
System.Text.Encoding.GetEncoding(encoding)).BaseStream,
System.Text.Encoding.GetEncoding(encoding));//clq 2014.05.23

很显眼小编或许是鬼子,编码指定的职位弄错了.


为方便大家参考,作者放上修改后的凡事品类文件,那里用的是 debug
版本,对功用有要求的条件请自行编译其他版本.代码修改的地方不多,我们可全文检索
“//clq”
字样就能找到,其余代码因为本人水平有限也看不懂也不敢乱改.出于稳定和不想惹麻烦的来头今后也不打算大改,能在本人眼下那个小项目中用就行.

下载地址为:

http://files.cnblogs.com/-clq/NVelocity-0.4.2.8580%5B2014.05.23%5D%5Bclq\_modify%5D.zip


设若还有此外 bug 小编会再上传新版本.其它也期望有精晓内情的网友牵线下
nvelocity 如此混乱的原因.