WSGI
- 全称是Web Server Gateway Interface,只是一种描述web server如何与web application通信的规范。
- 要实现WSGI协议,必须同时实现web server和web application
- Django,Flask是实现了WSGI application协议的web框架。Django,Flask框架都有自己实现的简单的WSGI server,一般用于服务器调试,生产环境下建议用其他WSGI server。
Werkzeug
- Flask是基于werkzeug开发的。Werkzeug是一个WSGI工具包,可以作为一个Web框架的底层库。
- WSGI简化了编写Web app的复杂度,使程序员不必关注底层的数据传输而专注于Web本身。
- 框架则基于WSGI进一步抽象,用一个函数处理一个URL。而URL与函数的绑定,称为路由(route),而这些就交给Web框架来做了。
安装
pip install Flask
最小的 Flask 应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
- 导入 Flask 类。该类的实例是我们的WSGI应用程序。
- Flask构造函数使用当前模块(__name __)的名称作为参数。
- route() 装饰器来告诉 Flask 触发函数的 URL 。
- 函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。
- Flask类的run()方法在本地开发服务器上运行应用程序。
app.run(host, port, debug, options)
- host:要监听的主机名。默认为127.0.0.1(localhost)
- port:默认值为5000
- debug:默认为false。当设置为true时,我们每次修改代码时,都会自动发现变更并重新启动运行最新的代码。不过,生产环境一定不能启调试模式,因为它会使后台服务处于被攻击的风险之中。
- options:要转发到底层的Werkzeug服务器。
路由
- 使用 route() 装饰器来把函数绑定到 URL
- 通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。
@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % escape(username)
JSON 格式的 API
- 如果从视图 返回一个 dict ,那么它会被转换为一个 JSON 响应。
@app.route("/me")
def me_api():
user = get_current_user()
return {
"username": user.username,
"theme": user.theme,
"image": url_for("user_image", filename=user.image),
}
网友评论