Flask[初见]

Flask[初见]

七月 03, 2023

什么是Flask?

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。

​ ——百度百科

如果看文章的你也同我一样,如此小白,便会觉得,听不懂。

什么是Web应用框架?

WSGI是什么?

模板引擎又是什么?

疑问很多,下面我将通过我的个人理解首先解答第一个问题。

Web应用框架

在接触Python之前我便对tomcat , Djongo 等,略有耳闻。这是两种知名的,Web应用框架。在实际操作之前,仅凭想象,或是其他渠道学习,理解总归是差些的。

Web应用框架,说白了,就是可以通过编写代码,实现一个运行在Web上的应用程序。什么是Web应用程序,即能通过Web访问,也就是HTTP或HTTPS访问使用的应用。

再通俗点讲,就是实现了网站的网页和网站的部署。实现了html和web服务器的功能。

瞬间上手Flask

首先,我们先来安装一下Flask,只需要一条代码即可。(默认你电脑上有Python和pip)

1
pip install flask

然后,打开你的IDE,编写一段超级精简的Python代码!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from flask import Flask
app = Flask(__name__)

# __name__是python的一个内置类属性,它存储模块的名称。 python的模块既可以被调用,也可以独立运行。

@app.route('/') # 这是一个装饰器

# 用来装饰函数hello_world,当请求的path 是 / 时,程序用函数hello_world来处理这个请求

def hello_world():
return 'Hello World!'


if __name__ == '__main__':
app.run()

点击运行,得到以下输出。

1
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

然后访问其中的地址,即可得到一个网页。

网页中只有一行字,Hello World。本来这博文也是写给自己看的,就不多赘述了。

name

不得不说一下 __name__ 这玩意,比较的神奇。

如果不在本文件运行这个属性,它返回的值是文件名,但当在本文件运行时,它返回的值是 __main__

装饰器

装饰器以 @ 开头 ,用以装饰后面的函数。

app.run

我们可以指定监听的地址和端口,如:

1
app.run(host='0.0.0.0', port=1122)

Flask路由

在讲解最小的flask应用时,提到了装饰器route,它的作用就是将处理请求的函数绑定到URL上(URL必须以反斜杠开头),这种设计体现了解耦的思想。 img 不同的请求被路由到不同处理函数上,这个函数称之为视图。路由保存了URL和处理函数之间的映射关系,映射关系的建立是通过route装饰器完成的。

​ ——COOLPython

建立映射关系

通过route装饰器,不同的请求被路由到不同处理函数上。路由保存了URL和处理函数之间的映射关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask
app = Flask(__name__)


@app.route('/hello')
def hello():
return 'hello'


@app.route('/books')
def books():
return 'books'


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

变量规则

实例中,无论是 /hello 还是 /books/ 这种URL都是固定的,而在实际使用中,经常会用到不固定的URL。如:

比如/book/1/price 这种restful风格的URL。

先不谈什么是restful风格,当务之急是我们需要实现一个动态变化的URL。

而Flask自带实现方法,允许给URL添加变量部分。

1
2
3
@app.route('/book/<int:id>/price')
def price(id):
return str(id)

变量部分的规则为 converter:variable_name ,variable_name将作为参数传递给所绑定的函数,而且可以根据converter转换器对variable_name进行转换。

converter转换器有下面几种

| 转换器 | 说明 | | —— | —————- | | int | 接受整数 | | float | 接受浮点数 | | path | 接受带斜线的path |

如果不标注转换器类型,则默认转为字符串,下面是这几种转换器的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 不指定转换器
@app.route('/book/<name>/author')
def author(name):
return name


# 转换器为int
@app.route('/book/<int:id>/price')
def price(id):
return str(id)


# 转换器为float
@app.route('/book/price-ge/<float:price>')
def books_by_price(price):
return str(price)


# 转换器为path
@app.route('/book/<path:book_info>')
def books_by_path(book_info):
return book_info

​ ——COOLPYTHON

感想

初见,Suki , 结婚!