第2章 程序的基本结构
1.所有 Flask 程序都必须创建一个程序实例。Web 服务器使用一种名为 Web 服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所有请求都转交给这个对象处理。
from flask import Flask
app = Flask(name)
2.客户端把请求发给web服务器,web服务器把请求发送给Flask程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。把修饰的函数注册为路由。
@app.route(’/’)
def index():
return ‘
Hello World!
’这样的函数称为视图函数。
此函数的返回值称为响应。
下例定义的路由中有一部分是动态名字:
@app.route(’/user/’)
def user(name):
return ‘
Hello, % s!
’ % name3.程序实例用 run 方法启动 Flask 集成的开发 Web 服务器:
if name == ‘main’:
app.run(debug=True)
服务器启动后,会进入轮询,等待并处理请求。轮询会一直运行,直到程序停止。
启用调试模式,可以把 debug 参数设为 True 。
4.Flask 从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对
象就是一个很好的例子,它封装了客户端发送的 HTTP 请求。
Flask 使用上下文临时把某些对象变为全局可访问。
from flask import request
@app.route(’/’)
def index():
user_agent = request.headers.get(‘User-Agent’)
return ‘
Your browser is % s
’ % user_agent5.HTTP 响应中一个很重要的部分是状态码,Flask 默认设为 200,这个代码表明请求已经被成功处理。
如果视图函数返回的响应需要使用不同的状态码,那么可以把数字代码作为第二个返回值,添加到响应文本之后。
@app.route(’/’)
def index():
return ‘
Bad Request
’, 400Flask 视图函数还可以返回 Response 对象。 make_response() 函数可接受 1 个、2 个或 3 个参数(和视图函数的返回值一样),并返回一个 Response 对象。
from flask import make_response
@app.route(’/’)
def index():
response = make_response(‘
This document carries a cookie!
’)response.set_cookie(‘answer’, ‘42’)
return response
abort 函数,用于处理错误。
from flask import abort
@app.route(’/user/’)
def get_user(id):
user = load_user(id)
if not user:
abort(404)
return ‘
Hello, % s
’ % user.name6.Flask-Script 是一个 Flask 扩展,为 Flask 程序添加了一个命令行解析器。
from flask_script import Manager
manager = Manager(app)
…
if name == ‘main’:
manager.run()
shell 命令用于在程序的上下文中启动 Python shell 会话。你可以使用这个会话中运行维护
任务或测试,还可调试异常。
运行 python hello.py runserver 将以调试模式启动 Web 服务器。