2.1 初始化
from flask import Flask
app = Flask(__name__)
2.2 路由和视图函数
在flask程序中定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册称为路由;
处理函数和URL和关系的程序称路由
@app.route('/') # 表示这个网址默认访问这个函数
def hello_world():
return 'Hello World!'
像hello_world()的这样的函数称为视图函数,
视图函数的响应可以是包含HTML的简单字符串,也可以是复杂的表单(表单在网页中主要负责数据采集功能,有表单标签,表单域,表单按钮)
2.3 启动服务器
if __name__ == '__main__':
app.run(debug = true) # debug 调试模式
2.4 一个完整的程序
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/user/<name>') #动态路由
def user(name):
return 'hello, %s!' % name
if __name__ == '__main__':
app.run()
2.5 请求响应
2.5.1 程序和请求上下文
current_app: 程序上下文:当前激活程序的程序实例
g : 程序上下文: 处理请求时用作临时存储的对象,每次请求都会重设这个变量
request : 请求上下文: 封装了客户端发来的HTTP请求中的内容
session : 请求上下文: 用户会话,用于存储请求之间需要“记住”的值的词典
app_ctx = current_app.name
app_ctx.push()
current_app.name
app_ctx.pop()
2.5.2 请求调度
程序收到客户端的请求时,要找到处理该请求的视图函数。
print(app.url_map)
输出映射的关系
2.5.3 请求钩子
有时在处理请求之前或之后执行代码会很有用。
before_first_request: 注册一个函数, 在处理一个请求之前运行
before_request: 注册一个函数, 在处理第次请求之前运行
after_request: 注册一个函数, 如果没有未处理的异常抛出, 在每次请求之后运行
teardown_request: 注册一个函数, 即使有未处理的异常抛出,也在每次请求之后运行
2.5.4 响应
a, 返回的第二个参数可以是状态码
return "abc", 200
b,重定向 (状态码302)
return redirect("http://www.baidu.com");
c,abort 中断处理
@app.route('/user/<id>') #动态路由
def get_user(id):
user = True
if not user:
abort(404)
return '<h1> hello, %s </h1>' % id
abort不会把控制权交给调用它的函数,而是抛出异常把控制权交给服务器
2.6 Flask扩展
flask被设计为扩展形式,故没有提供一些重要的功能,例如数据库和用户认证;
使用Flask_script支持命令行选项
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)