Flask Web 开发学习笔记(一)

本教程前提:

  • Python 3
  • macOS 环境

虚拟环境

安装 Flask 最便捷的方式是使用虚拟环境。虚拟环境是 Python 解释器的一个私有副本,在这个环境中你可以安装私有包,而且不会影响系统中安装的全局 Python 解释器。

虚拟环境非常有用,可以在系统的 Python 解释器中避免包的混乱和版本的冲突。为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,从而保持全局解释器的干净整洁,使其只作为创建(更多)虚拟环境的源。使用虚拟环境还有个好处,那就是不需要管理员权限。

1.创建虚拟环境
$ python3 -m venv XXX
2.激活虚拟环境(创建的虚拟环境目录为 venv
$ source venv/bin/activate
3.退出虚拟环境:
(venv) $ deactivate

使用 pip 安装 Python 包

大多数 Python 包都使用 pip 命令安装,使用 pip 安装 Flask(其它 Python 包同理):

(venv) $ pip install flask

一个简单的 Demo

./index.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello World!</h1>'

@app.route('/user/<name>')
def sayHello(name):
    return '<h1>Hello %s!</h1>' % name

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

启动程序:

(venv) $ python index.py

访问 http://localhost:5000/ 输出 Hello World!
访问 http://localhost:5000/user/Tom 输出 Hello Tom!

从 Demo 中学习路由、修饰器、视图函数、请求、响应概念,一步步分析每行代码:

1. from flask import Flask

从 flask 库中导入 Flask 函数

2. app = Flask(name)

创建 Flask 对象 app,Flask 类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,Python 的 __name__ 变量就是所需要的值。

3. @app.route(‘/’)

客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask 程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间的关系的程序称为路由

在 Flask 程序中定义路由的最简便方式,是使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由。

修饰器是 Python 语言的标准特性,可以使用不同的方式修改函数的行为。惯常用法是使用修饰器把函数注册为事件的处理程序。

4. def index()

index() 函数放在 @app.route('/') 后面,所以就是把 index() 函数注册为路由。

如果部署程序的服务器域名为 http://www.example.com ,在浏览器中访问 http://www.example.com 后,会触发服务器执行 index() 函数。

5. @app.route(‘/user/')

@app.route('/'),如果部署程序的服务器域名为 http://www.example.com ,在浏览器中访问 http://www.example.com/user/Tom 后,会触发服务器执行下方修饰函数 sayHello(name)

6. if __name__ == '__main__'

详见 StackOverflow :

http://stackoverflow.com/questions/419163/what-does-if-name-main-do

大致翻一下:

当 Python 解释器,读 py 文件,它会执行它发现的所有代码。在执行代码之前,它会定义一些变量。例如,如果这个 py 文件就是主程序,它会设置 __name__ 变量为 "__main__"。如果这个 py 被引入到别的模块,__name__ 会被设置为该模块的名字。

举个栗子: 创建一个 test.py 文件:

if __name__ == '__main__':
	print '自己主动执行'
else:
	print '我被别的模块引入'

执行下 $ python test.py 会输出自己主动执行 直接在命令行中输入 python3 随后输入 import test,会输出:我被别的模块引入

7. app.run(debug=True)

程序实例用 run() 方法启动 Flask 继承的开发 Web 服务器。

服务器启动后,会进入轮询,等待并处理请求。轮询会一直进行,直到程序停止,比如按 Ctrl-C 键。

debug=True 表示启用调试模式。方便我们调试。

字符串拼接

1. 使用 +
str = 'hello' + 'world'
2. 使用字符串 join() 方法
names = ['tom', 'jerry']
nameStr = ' '.join(names)
3. 使用 %
name = 'Tom'
str = '<h1> hello %s!</h1>' % name
4. format() 方法
str = '{0} is not {1}'.format('Tom', 'Jerry')

str = '{who} is not {you}'.format(who='Tom', you='Jerry')