“上期说要学数据库之后,迟迟没有更新。主要是因为接触新的版块,很多理论知识需要学习,毫无头绪,导致从MySql学到HTML5又转到web开发。作为新手,本期不太能算得上心得,只能算得上强行入门吧~”
01
Flask入门
Flask框架:是一种适合在微小项目上的web框架,目前就暂且把当成一个能和浏览器交互的一个python包吧。使用pip安装flask。
# -*- coding:utf-8 -*-
from flask import Flask
app=Flask(__name__)
@app.route("/")
def helloworld():
return 'hello world!'
@app.route("/today")
def hellofriends():
return "April Fool's Day"
if __name__=='__main__':
app.run()
运行这个文件:会在终端出现下面内容
image然后我们就可以登陆上面显示的网址,效果如下(注意下图网址和内容的对应关系):
image image好了,前面就是一个小例子,会发现很简单就实现了python和浏览器的连接,当然这都是flask的功劳,看到这,感觉有点像之前的scrapy。
接来下解释一下上面几行代码的意思(如果你想知道为什么这几行代码就可以实现与浏览器的连接,这个就涉及到flask的内部架构了,意思就是我还不会)
「 app=Flask(__ name__ ) 」
首先引入了Flask类,app是它的一个实例,__ name__ 在之前介绍过,直接运行,__ name__ =='__ main__ ',使用import调用时,不等于‘__ main__ ’,变成模块名(就是python文件名,没有.py后缀~),这样Flask在运行时才能进行定位到引用的模块。
「 route()装饰器 」
装饰器的作用是实现路由函数,路由是指URL和函数之间的映射,意思是说你输入一个特定的网址,就会返回给你特定的页面(由对应的python函数实现)。本例中,用修饰器将helloworld和hellofriends函数修饰为路由函数。
「 装饰器 」
装饰器(decorator)算的上是本期一个重点,我们将装饰器理解为一个接受函数作为参数的函数。首先学习一下如何把函数作为参数传递给一个函数。
image通过上图看出,我们定义了两个函数,其中deco的参数是函数func,我还专门打印了f的类型,是函数可不是字符串,字符串是要加引号的。注释部分也解释了函数加不加括号的影响。
然后听说装饰器也是接受函数作为参数的,所以把上面的代码鼓捣成装饰器的样子(其实实现的功能一样,但写法和上图不一样)。
image首先也是定义了deco函数,参数是函数func,里面又定义了一个wrapper函数,把它当固定格式。然后发现定义函数func的时候上面加了一行@deco,这就是装饰器的用法了。在输出结果时发现直接func()就出结果了,反而deco(func)没结果。可以理解为func函数被deco修饰之后加上了deco的功能~
还要理解的就是deco中func只是形参,只是刚好后面定义函数时用了一样的命名,所以把@后面一行的函数名更换也是一样的。
image由此也就看出装饰器的好处了,使用修饰器,尽管只是运行了下面的love函数,但不再是定义的初始函数,而是被修饰过的函数了。注意,修饰器只修饰和它紧挨的函数。这就是修饰器的入门,之后再理解传参数就很容易了。
关于Flask中的修饰器应该可以能理解一点了,对于例子中,目前只需要知道修饰器传入的url规则和下面的函数相对应就好了。
「 http://127.0.0.1:5000 」
这个网址是程序默认挂载的网址以及端口,也就是根地址,其实就是本机地址。所以@app.route('/')以及下面的函数就代表根地址和它的显示内容。同样的@app.route('/today')对应的网址是http://127.0.0.1:5000/today。
[彩蛋]
在学习的过程中,发现在app实例后面加上一行'app.config['DEBUG']=True'后,只要你的代码发生了改变,就会自动重启flask(修改代码后过几秒终端就输出以下内容),然后直接刷新页面就可以,这就是传说中的DEBUG模式。
image02
遇到的小问题
01 Q:关于每次ctrl+c关闭服务器仍会占用端口
A:刚开始不知道有DEBUG模式,所以一修改代码就要重新运行,但会返回错误说端口已占用。必须使用kill命令杀死stop进程,才能继续运行。当然有了DEBUG谁还搞这个~
「结束语」:学习新知识总是有趣且枯燥,但道阻且长,行则将至。之后可能就数据库前端以及web框架同步学习,下期见啦(最后感谢陌生朋友们的关注)~
网友评论