1.Flask简介
Flask和Django一样,也是一个基于MVC设计模式的Web框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 wdb 应用程序可以使一些 web 页面、博客、wiki、基于 web 的日历应用或商业网站。Flask 属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖于外部库的框架。这既有优点也有缺点,优点是框架很轻量,更新时依赖少,并且专注安全方面的 bug,缺点是,你不得不自己做更多的工作,或通过添加插件增加自己的依赖列表。Flask 的依赖如下:
- Werkzeug 一个 WSGI 工具包(Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口)。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。)
- jinja2 模板引擎(你搭建过一个网站吗?你面对过保持网站风格一致的问题吗,你不得不写多次相同的文本吗?你有没有试图改变这种网站的风格?如果你的网站只包含几个网页,改变网站风格会花费你一些时间,这确实可行。尽管如此,如果你有许多页面(比如在你商店里的售卖物品列表),这个任务便很艰巨。使用模板你可以设置你的页面的基本布局,并提及哪个元素将发生变化。这种方式可以定义您的网页头部并在您的网站的所有页面使它保持一致,如果你需要改变网页头部,你只需要更新一个地方。使用模板引擎创建/更新/维护你的应用会节约你很多时间。)
安装flask时应该注意其必须的几个支持包比如Jinja2,Werkzeug等。如果使用easy_install或者pip这样的安装工具的话那么就不必担心这么多了。另外flask还有一些可选的辅助模块,使用它们可以让程序更加简洁易懂,比如SQLAlchemy用于数据库的连接和操作,flask-WTForm用于网页上表单的设计。
1.安装Flask,首先我们来安装Flask。最简单的办法就是使用pip。
pip install flask
然后打开一个Python文件(hello.py),输入下面的内容并运行该文件。然后访问localhost:5000
,我们应当可以看到浏览器上输出了Hello Flask!
。
# -*- coding: UTF-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello flask!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True, threaded=True)
2.运行Flask,通过python 执行hello.py文件
python hello.py
服务会默认的起在127.0.0.1:5000,如下图所示:
3.运行参数
在文件中可以修改参数进行变更debug,port, host,threaded以及processes等。关于run方法中的几个参数,
- host指定了监听的ip地址,默认是127.0.0.1,即只有本地可以访问而外部是无法访问的;
- port是监听端口,默认5000,
- debug是指出是否处于调试模式,如果是那么当程序执行出错时的调用栈和错误信息全部都会返回给客户端浏览器。当上生产环境的时候千万记得要把这个改成False否则会有暴露代码的风险。
- threaded : 多线程支持,默认为False,即不开启多线程;
- processes:进程数量,默认为1.
4.渲染模板
现在的网站很少有全静态页面的了,而动态页面靠的就是模板的渲染。flask的默认模板引擎是Jinja2,它有一套自己的模板语言,一个简单的模板长成下面这样:
<html>
<body>
{% if name %}
<h1>Hello,{{name}}!</h1>
{% else %}
<h1>Hello,Stranger!</h1>
{% endif %}
</body>
</html>
这个模板体现了Jinja2中的选择结构,类似的还有:
循环结构:
{% for name in names %}
<h1>Hello,{{ name }}</h1>
{% endfor %}
宏(类似函数):
{% macro rend_mess(item) %}
<li>{{ item }}</li>
{% endmacro %}
然后就可以在下文中
{% for item in items %}
{{ rend_mess(item) }}
{% endfor %}
引入外部文件:
{% import 'macro.html' as macros %}
<ul>
{% for item in items %}
{{ macros.rend_mess(item) }}
{% endfor %}
</ul>
5.路由
在上面的例子里可以看到路由的使用。如果了解Spring Web MVC的话,应该对路由很熟悉。路由通过使用Flask的app.route
装饰器来设置,这类似Java的注解。
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
6.路径变量设置
如果希望获取/user/1
这样的路径参数,就需要使用路径变量。路径变量的语法是/path/<converter:varname>
。在路径变量前还可以使用可选的转换器,有以下几种转换器。
转换器 | 作用 |
---|---|
string | 默认选项,接受除了斜杠之外的字符串 |
int | 接受整数 |
float | 接受浮点数 |
path | 和string类似,不过可以接受带斜杠的字符串 |
any | 匹配任何一种转换器 |
uuid | 接受UUID字符串 |
例如:
# -*- coding: UTF-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/user/<string:user_name>')
def hello_world(user_name):
return 'Hello ' + user_name
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True, threaded=True)
7. 使用 IDE
这里推荐使用 PyCharm 来进行 python 项目开发。下载安装后(Professional 版本),新建一个 Flask 项目,然后指定目录、python 环境,完成后点击 Create,这样就创建了一个 Flask 项目,如果没有安装 Flask,PyCharm 会自动下载安装。如果想使用 virtualenv,可以参考下一个步骤。
8.Flask 项目目录结构
在介绍 Flask 的项目结构之前,先来看看标准 Flask 项目的项目结构。使用 PyCharm 新建 Flask 项目后,项目结构如下图所示:
只有三个文件夹(venv 文件夹已经用命令行生成了)和一个简单的入口类,接下来要把项目结构改造成标准的 Flask 项目结构:
Flask 项目有4个顶级文件夹:
- app ——(本例中是 jbox)Flask 程序保存在此文件夹中
- migrations ——包含数据库迁移脚本(安装了 flask-migrate 后自动生成)
- tests ——单元测试放在此文件夹下
- venv ——Python 虚拟环境
同时还有一些文件:
- requirements.txt —— 列出了所有的依赖包,以便于在其他电脑中重新生成相同的环境
- config.py 存储配置
- manage.py 启动程序或者其他任务
- gun.conf Gunicorn 配置文件
虽然新建的 Flask Project 已经可以运行,但是我们还是要按照标准的 Flask 程序来改造项目结构。下面我们就来改造一下 TestProject。
在命令行中依次使用以下命令来安装 Flask 扩展:
pip install flask-script
pip install flask-sqlalchemy
pip install flask-migrate