您好,我是码农飞哥,感谢您阅读本文!本文将主要介绍Flask框架的安装以及快速使用。
- Flask的简介
- 1. Flask框架的安装
- 1.1. 软件版本
- 1.2 虚拟环境
- 1.3 安装Flask
- 2. Flask框架的快速使用
- 一个最小的应用
- 运行服务
- 小结
- 路由
- url路径参数(动态路由)
- 唯一的URL/重定向行为
- URL构建
- 总结
- 参考
Flask的简介
Flask框架是一个Python编写的一种轻量级的框架,只提供了Web框架的基本功能,比其他的框架更加灵活、自由。
1. Flask框架的安装
框架开发时,兼容性是个很大的问题,Flask要求Python的版本在3.4以上。本文用到的软件版本如下:
1.1. 软件版本
软件 | 版本号 |
---|---|
Python | 3.6.7 |
flask | 1.1.2 |
1.2 虚拟环境
不同的Python项目会需要不同的Python库,同一Python库的不同版本可能不兼容,为了避免这种问题一般在开发中是为不同的Python项目设置不同的虚拟环境。即为每个项目安装独立的Python库。创建一个Python项目之后,在项目的目录下默认会出现一个venv文件夹,这个文件夹就是虚拟环境,当然我们也可以自定义虚拟环境,命令如下:
创建虚拟环境
代码语言:javascript复制cd myproject
python3 -m venv flask_env
其中:flask_env是环境的名字,任意,有阅读性即可
激活进入/离开虚拟环境
Window 下直接执行相关的.bat文件,如下图所示:
- 激活虚拟环境
- 离开虚拟环境
Linux下的命令是:
代码语言:javascript复制. flask_env/bin/activate.sh
1.3 安装Flask
在已激活的虚拟环境中可以使用如下命令安装Flask框架:
代码语言:javascript复制$ pip install Flask
安装成功之后查看当前环境下的包:
代码语言:javascript复制pip freeze
从上图我们可以看出,Flask会自动安装如下依赖:
依赖名称 | 依赖作用 |
---|---|
Werkzeug | 用于实现WGGI,应用和服务之间的标准Python接口 |
Jinja | 用于渲染页面的模板语言 |
MarkupSafe 与Jinja共用 | 在渲染页面时用于避免不可信的输入,防止注入攻击 |
ItsDangerous | 保证数据完整性的安全标志数据,用于保护Flask的session cookie |
Click | 一个命令行应用的框架,用于提供flask命令,并允许添加自定义管理命令 |
2. Flask框架的快速使用
安装好Flask框架之后,我们就可以使用该框架进行开发了。这里创建了一个Python项目,项目的结构如下图所示:
一个最小的应用
在创建好的项目下新建一个Python文件,命名为: view.py
代码语言:javascript复制#导入Flask类,该类的实例将会成为我们的WSGI应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
from flask import Flask
的意思是导入Flask类,该类的实例将会成为我们的WSGI应用 2.app = Flask(__name__)
的意思是创建一个该类的实例,第一个参数是应用模块或者包的名称。如果你使用一个单一模块(就像本例),那么应当使用__name__
,因为名称会根据这个模板是按应用方式使用还是作为一个模板导入而发生变化。这个参数是必须的,这样Flask才能知道在哪里可以找到模板和静态文件等东西。3.@app.route('/')
的意思是让我们使用route()装饰器来告诉Flask触发函数的URL。4.def hello_world(): return 'Hello, World!'
函数名称被用于生成相关联的URL。函数最后返回需要在用户浏览器显示的信息。
运行服务
- 在运行服务之前首先要在终端里导出FLASK_APP环境变量,命令如下:
# Window环境下
(flask_env) D:学习记录PycharmProjectsflask_demo>set FLASK_APP=com/jay/main/view.py
# Linux环境下
$ export FLASK_APP=com/jay/main/view.py
- 运行flask命令
(flask_env) D:学习记录PycharmProjectsflask_demo>python -m flask run
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL C to quit)
启动成功之后,我们直接访问http://127.0.0.1:5000/
地址就可以访问上面的接口了。如果虚拟环境不在项目下,则访问接口时需要带上虚拟环境,比如:http://127.0.0.1:5000/flask_env默认情况下,运行服务器后,只有你的电脑能访问,其余的电脑都不能访问,要想其他电脑也可以访问,只需要在运行如下命令:
$ flask run --host=0.0.0.0
如果要开启所有开发功能(包括调试模式),那么要在运行服务器之前导出FLASK_ENV环境变量并把其设置为development
代码语言:javascript复制# Window环境下
set FLASK_ENV=development
# Linux环境下
$ export FLASK_ENV=development
接着运行flask run
命令
$ flask run --host=0.0.0.0
在这里插入图片描述
小结
run启动参数 | 说明 |
---|---|
host | 主机地址,默认是127.0.0.1,运行外部ip地址访问,0.0.0.0 |
port | 端口号,默认是5000 |
debug | 调试模式,默认为false,开发的时候一般设置为true,这样有视图有错误,在浏览器中显示,方便调试错误。项目上线需要改为false。也可以启动重启代码。 |
use_reloader | 是否自动重启代码,默认为false,true为自定义 |
路由
url路径参数(动态路由)
可以通过请求的url中获取需要的参数。例如:现在定义一个路由/users/,如果请求的url为/users/张三,表明想要获取编号为1的用户信息,则这里的1就是请求中传递的参数
代码语言:javascript复制@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % escape(username)
上面代码中<>
即为转换器语法,默认为字符串类型,即匹配到的内容始终为字符串类型 Flask中其他类型转换器
转换器类型 | 使用 |
---|---|
string字符串类型 | < string:name > |
int整数类型 | < int:name > |
float小数类型 | < float:name > |
path路径类型 | < path:name > |
唯一的URL/重定向行为
以下两条规则的不同之处在于是否使用尾部的斜杠。:
代码语言:javascript复制@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。
URL构建
url_for()函数用于构建指定函数的URL。。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。为什么不在把 URL 写死在模板中,而要使用反转函数 url_for() 动态构建?主要是有如下好处:
- 反转通常比硬编码 URL 的描述性更好。你可以只在一个地方改变 URL ,而不用到处乱找。
- URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。
- 生产的路径总是绝对路径,可以避免相对路径产生副作用。
- 如果你的应用是放在 URL 根路径之外的地方(如在 /myapplication 中,不在 / 中), url_for() 会为你妥善处理。例如,这里我们使用 test_request_context() 方法来尝试使用 url_for() 。test_request_context() 告诉 Flask 正在处理一个请求,而实际上也许我们正处在交互 Python shell 之中, 并没有真正的请求 。
from flask import Flask, escape, url_for
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return '{}'s profile'.format(escape(username))
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
在这里插入图片描述
总结
本文主要介绍了Flask框架的安装和简单使用,这是一种使用非常方便的web框架。
参考
Flask的安装Flask的快速使用Flask框架简介