Flask框架基础功能

时间:2022-02-10 05:01:27

引言

本文简单汇总Flask框架几大基础功能,包括:

  • 路由系统
  • 模板
  • 数据库
  • 几种常用Flask库

一个简单的Flask事例

Flask是一个基于Python,依赖Jinja2模板和WSGI服务的框架。当我们访问一个URL时,浏览器发出HTTP请求,WSGI接收到我们的请求,交给Flask框架提供的一系列功能来处理请求,并返回HTTP响应给浏览器(客户端)。

与Django相比,Flask作为一个微框架,不会面面俱到,但可以通过安装扩展来增加提供的服务,可定制性很强。

下面是一个简单的Flask事例,当我们访问http://127.0.0.1:5000时,浏览器会显示hello flask

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
return '<h1>hello, flask</h1>' if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)

上述程序我们创建了一个app的Flask实例,将根目录与index路由函数函数绑定,并运行在localhost:5000上。

运行上述程序,我们可以直接python 程序名运行。如果用于开发环境,还有其他方法来运行,Flask源码里面的注释写是很清楚,需要设置FLASK_DEBUG环境变量为程序名,然后就可以通过flask run来运行该服务器。

路由系统

上面的程序中,@app.route('/')是一个装饰器。python里面装饰器常常用来将被装饰的函数注册为某事件的回调函数。具体来说,当Web浏览器请求/时,会触发index这个函数,并将index函数的返回值作为响应返回给浏览器。不同的URL可以有相同的视图处理函数,换句话说,一个函数可以对应多个URL。这在Django的MTV模式中,对应其中的views。

常用的路由系统有以下五种:

  • @app.route('/usr/')
  • @app.route('/usr/int:username')
  • @app.route('/usr/float:date')
  • @app.route('/usr/path:path')
  • @app.route('/usr', methods=['GET', 'POST'])

以下是对应关系:

DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}

可以看到不支持正则表达式。关于这点,可以参考Segment Fault的回答。

To Be continue