Flask快速入门
Flask 是一个使用 Python 编写的轻量级 Web 应用框架,WSGI 工具箱使用 Werkzeug ,模板引擎使用 Jinja2,可以使用 pip install flask
安装,本博客参考官方文档对 Flask 做一个简单的介绍,帮助大家快速入门,相关的官方文档如下:
- Flask 文档(中文版):http://docs.jinkan.org/docs/flask/
-
Flask 文档(英文版):http://flask.pocoo.org/docs/1.0/
- Werkzeug 文档:http://werkzeug.pocoo.org/documentation/
-
Jinja2 文档:http://jinja.pocoo.org/2/documentation/
1、快速入门
我们先从一个简单的例子入手,创建一个 python 文件,在文件中输入以下内容:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!'
if __name__ == '__main__':
app.run()
然后运行此文件 ,这时候访问 http://127.0.0.1:5000/ ,就会看到 Hello World! 的问候语
注意:
-
不可以将文件命名为
flask.py
,因为这会与 Flask 本身冲突 -
也不可以直接使用 IDLE 运行,否则会产生一个不可预测的错误
短短几行代码,就可以创建一个最简单的 Web 应用,下面我们再来看看这几行代码究竟做了什么:
- 导入 Flask 类
- 创建该类的一个实例 app,参数 __name__ 用于指示模板、静态文件等的位置
- 使用 route() 装饰器把函数 hello() 绑定在 URL(‘/’) 上,当访问 URL(‘/’) 时,调用函数 hello()
- 使用 run() 函数运行应用程序
2、创建对象
我们可以从类 Flask()
中创建对象,该对象就是我们的 WSGI 应用程序,常用参数如下:
-
import_name:必需,用于查找文件系统上的资源,如果是单个模块,则可以使用 __name__,如果是软件包,则建议对软件包的名称进行硬编码
例如,假设应用程序在
application/app.py
中定义,则可以使用以下两个版本之一创建:app = Flask('application') app = Flask(__name__.split('.')[0])
-
static_url_path:用于为静态文件指定不同的路径,默认为 static_folder 文件夹的名称
-
static_folder:包含静态文件的文件夹,默认为根路径中的 static 文件夹
-
template_folder:包含模板文件的文件夹,默认为根路径中的 templates 文件夹
-
instance_path:应用程序的备用实例路径,默认为包或模块同目录下的 instance 文件夹
-
instance_relative_config:如果设置为 True,则用于加载配置文件的相对文件名相对于实例路径而不是应用程序根目录,默认为 False
3、URL 路由注册
(1)注册路由
什么是 URL 路由注册呢?URL 路由注册是为给定的 URL 规则注册视图函数,简单来说,就是把函数绑定到特定 URL 上,当访问特定 URL 时,则调用该函数,常使用以下两种方法注册路由:
-
route()
装饰器
@app.route('/')
def hello():
return 'Hello World!'
-
add_url_rule()
函数,与route()
装饰器类似
def hello():
return 'Hello World!'
app.add_url_rule('/', hello)
(2)变量规则
我们不仅可以为任意合法的 URL 绑定函数,而且还可以为动态的 URL 绑定函数
可以给 URL 添加变量,语法为: <variable>
,变量部分接受任何不带斜线的字符串,以关键字参数的形式传递给视图函数
@app.route('/user/<username>')
def show_user(username):
return 'User: %s' % username
也可以给 URL 添加规则,语法为: <converter:variable>
,指定一个可选的转换器
转换器 | 描述 |
---|---|
string | 接受任何不带斜线的字符串(默认的转换器) |
int | 接受整数 |
float | 接受浮点数 |
path | 与 string 相似,但接受斜线 |
@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post: %d' % post_id
还可以为同一个函数定义多个规则,但是它们必须要唯一,还可以给定默认值
@app.route('/page/', defaults={'page': 1})
@app.route('/page/<int:page>')
def show_users(page):
return 'Page: %d' % page
(3)请求方法
默认情况下,路由只接受 GET 请求,但是可以使用 method 参数改变这个行为
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()
4、运行程序
我们可以使用run()
在服务器上运行应用程序,其常用参数如下:
- host:要监听的主机名,默认为 127.0.0.1,表示仅在本地可用,如果设置为 0.0.0.0,则表示服务器在外部可用
- port:服务器的端口,默认为 5000 或 SERVER_NAME 环境变量中定义的端口
- debug:是否启动调试模式,在调试模式下,调试器将在发生未处理的异常时启动,如果检测到代码中的更改,服务器将自动重新加载应用程序
- **options:需要转发到底层 Werkzeug 服务器的选项