本系列笔记是我阅读Miguel Grinberg的《Flask Web Development》的笔记,标题与书本同步。希望通过记录技术笔记的方式促进自己对知识的理解。
本篇对应书本第二章:程序的基本结构。
初始化
1 2 3 |
from flask import Flask #导入Flask模块 app = Flask(__name__) #创建Flask类的实例 |
注:对于Flask开发者来说,传给Flask应用程序构造函数的name参数是比较容易弄混淆的。Flask使用这个参数来确定应用程序的根目录,这样以后可以相对这个路径来找到资源文件。
路由和视图函数
注册新的路由
在Flask应用中,路由是指用户请求的URL与视图函数之间的映射。
Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器。
匹配动态URL
route装饰器 :可以使用Flask应用实例的route装饰器将一个URL规则绑定到一个视图函数上。
下面程序中route装饰器将根目录绑定在index视图上。
1 2 3 |
@app.route('/') def index(): return '<h1>Hello World!</h1>' |
URL变量类型过滤
1 2 3 4 5 6 7 8 9 |
@app.route('/user/<name>') def user(name): return '<h1>Hello, %s</h1>' % name 类似: int 接受整数(float接受浮点数) @app.route('/post/<int:post_id>') path转换器允许规则匹配包含/的字符串。 @app.route('/file/<path:fname>') |
启动服务器
1 2 3 4 5 6 7 8 9 10 11 |
if __name__ == '__main__': app.run(debug=True) # 模块是对象,并且所有的模块都有一个内置属性 __name__。 # 一个模块的 __name__ 的值取决于您如何应用模块。 # 如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。 # 但是您也可以像一个标准的程序样直接运行模块, # 在这种情况下, __name__ 的值将是一个特别缺省"__main__"。 # debug=True 调试模式开启 |
一个完整的程序
hello.py: 一个完整的Flask程序
1 2 3 4 5 6 7 8 9 |
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>Hello World!</h1>' if __name__ == '__main__': app.run(debug=True) |
运行结果如下:
hello.py: 包含动态路由的Flask程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>Hello World!</h1>' @app.route('/user/<name>') def user(name): return '<h1>Hello,%s</h1>' % name if __name__ == '__main__': app.run(debug=True) # 定义了动态路由/user/<name> |
运行结果如下:
请求-响应循环
程序和请求上下文
请求对象封装了客户端发送的HTTP请求。
将请求对象作为参数传入视图函数,视图函数即可访问请求对象。