导入
pip install -r requirements.txt
- <a name="g27vas"></a>
#### app = Flask(**name**) 解析
!/usr/local/bin/python
coding=utf-8
from flask import Flask
app = Flask(name)
@app.route(‘/‘)
def hello_world():
return ‘Hello World!’
if name == ‘main‘:
app.run(host=’0.0.0.0’,port=9000)
‘’’’’
第4行,引入Flask类,Flask类实现了一个WSGI应用
第5行,app是Flask的实例,它接收包或者模块的名字作为参数,但一般都是传递name。
让flask.helpers.get_root_path函数通过传入这个名字确定程序的根目录,以便获得静态文件和模板文件的目录。
第7~9行,使用app.route装饰器会将URL和执行的视图函数的关系保存到app.url_map属性上。
处理URL和视图函数的关系的程序就是路由,这里的视图函数就是hello_world。
第11行,使用这个判断可以保证当其他文件引用这个文件的时候(例如“from hello import app”)不会执行这个判断内的代码,也就是不会执行app.run函数。
第12行,执行app.run就可以启动服务了。默认Flask只监听虚拟机的本地127.0.0.1这个地址,端口为5000。
而我们对虚拟机做的端口转发端口是9000,所以需要制定host和port参数,0.0.0.0表示监听所有地址,这样就可以在本机访问了。
服务器启动后,会调用werkzeug.serving.run_simple进入轮询,默认使用单进程单线程的werkzeug.serving.BaseWSGIServer处理请求,
实际上还是使用标准库BaseHTTPServer.HTTPServer,通过select.select做0.5秒的“while TRUE”的事件轮询。
当我们访问“http://127.0.0.1:9000/”,通过app.url_map找到注册的“/”这个URL模式,就找到了对应的hello_world函数执行,返回“hello world!”,状态码为200。
如果访问一个不存在的路径,如访问“http://127.0.0.1:9000/a”,Flask找不到对应的模式,就会向浏览器返回“Not Found”,状态码为404
‘’’
<a name="m5iupg"></a>
## 请求对象
Flask 通 过 上 下 文 变 量 request 对 外 开 放 请 求 对 象。 这 个 对 象 非 常 有 用, 包 含 客 户 端 发 送 的 HTTP 请 求 的 全 部 信 息。 Flask 请 求 对 象 中 最 常 用 的 属 性 和 方 法 见 表
| **属性或方法** | **说明** |
| --- | --- |
| form | 一 个 字 典, 存 储 请 求 提 交 的 所 有 表 单 字 段 |
| args | 一 个 字 典, 存 储 通 过 URL 查 询 字 符 串 传 递 的 所 有 参 数 |
| alues | 一 个 字 典, form 和 args 的 合 集 |
| cookies | 一 个 字 典, 存 储 请 求 的 所 有 cookie |
| headers | 一 个 字 典, 存 储 请 求 的 所 有 HTTP 首 部 |
| files | 一 个 字 典, 存 储 请 求 上 传 的 所 有 文 件 |
| get_data() | 返 回 请 求 主 体 缓 冲 的 数 据 |
| get_json() | 返 回 一 个 Python 字 典, 包 含 解 析 请 求 主 体 后 得 到 的 JSON |
| blueprint | 处 理 请 求 的 Flask 蓝 本 的 名 称 |
| endpoint | 处 理 请 求 的 Flask 端 点 的 名 称; Flask 把 视 图 函 数 的 名 称 用 作 路 由 端 点 的 名 称 |
| method | HTTP 请 求 方 法, 例 如 GET 或 POST |
| scheme | URL 方 案( http 或 https ) |
| is_secure | 通 过 安 全 的 连 接( HTTPS) 发 送 请 求 时 返 回 True |
| host | 请 求 定 义 的 主 机 名, 如 果 客 户 端 定 义 了 端 口 号, 还 包 括 端 口 号 |
| path | URL 的 路 径 部 分 |
| query_string | URL 的 查 询 字 符 串 部 分, 返 回 原 始 二 进 制 值 |
| full_path | URL 的 路 径 和 查 询 字 符 串 部 分 |
| url | 客 户 端 请 求 的 完 整 URL |
| base_url | 同 url ,但 没 有 查 询 字 符 串 部 分 |
| remote_addr | 同 url ,但 没 有 查 询 字 符 串 部 分 |
| environ | 请 求 的 原 始 WSGI 环 境 字 典 |
<a name="gggsny"></a>
## 响应对象
如 果 不 想 返 回 由 1 个、 2 个 或 3 个 值 组 成 的 元 组, Flask 视 图 函 数 还 可 以 返 回 一 个 响 应 对 象 。make_response() 函 数 可 接 受 1 个、 2 个 或 3 个 参 数( 和 视 图 函 数 的 返 回 值 一 样), 然 后 返 回 一 个 等 效 的 响 应 对 象。 有 时 我 们 需 要 在 视 图 函 数 中 生 成 响 应 对 象, 然 后 在 响 应 对 象 上 调 用 各 个 方 法, 进 一 步 设 置 响 应。 下 例 创 建 一 个 响 应 对 象, 然 后 设 置 cookie:
from flask import make_response @app.route(‘/‘) def index(): response = make_response(‘ < h1 > This document carries a cookie! </ h1 >’) response.set_cookie(‘ answer’, ‘42’) return response ```
响 应 对 象 最 常 使 用 的 属 性 和 方 法 见 表
属性或方法 | 说明 |
---|---|
status_code | HTTP 数 字 状 态 码 |
headers | 一 个 类 似 字 典 的 对 象, 包 含 随 响 应 发 送 的 所 有 首 部 |
set_cookie() | 为 响 应 添 加 一 个 cookie |
delete_cookie() | 删 除 一 个 cookie |
content_length | 响 应 主 体 的 长 度 |
content_type | 响 应 主 体 的 媒 体 类 型 |
set_data() | 使 用 字 符 串 或 字 节 值 设 定 响 应 |
get_data() | 获 取 响 应 主 体 |