
Flask是一个用Python编写的轻量级Web框架,它以简单、灵活且易于扩展而闻名。Flask遵循WSGI(Web Server Gateway Interface)规范,并且基于Jinja2模板引擎和Werkzeug WSGI工具包构建。Flask框架超级适合用于构建小型到中型的Web应用程序和 API,它提供了一种极简的核心架构,并允许开发者通过插件或扩展库来自由添加所需的功能。
Flask 核心组件
Flask类
Flask框架的核心是Flask类,一般每个应用实例化一个Flask对象,如下所示。
from flask import Flask
app = Flask(__name__)
路由 (Routing)
Flask使用装饰器来处理URL路由。每个视图函数通过@app.route()装饰器绑定到某个URL。
@app.route('/')
def hello_world():
return 'Hello, World!'
如下所示,可以通过@app.route('/<name>')来配置动态路由
@app.route('/user/<name>')
def greet_user(name):
return f'Hello, {name}!'
请求对象 (Request)
Flask提供了request 对象来获取HTTP请求的数据。request对象包含了如查询参数、表单数据、文件上传、请求头等信息。
from flask import request
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
return f'Username: {username}, Password: {password}'
响应对象 (Response)
Flask的视图函数返回的内容会被自动转换为HTTP响应。如果需要更复杂的响应,可以使用 make_response()函数。
from flask import make_response
@app.route('/response')
def custom_response():
response = make_response('This is a custom response', 200)
response.headers['Content-Type'] = 'text/plain'
return response
模板引擎 (Jinja2)
Flask通过Jinja2模板引擎支持动态HTML页面渲染。你可以将数据传递到模板,并在模板中使用Python风格的表达式和控制流语句。
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
hello.html模板如下所示
<html>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
重定向和错误处理
Flask提供了redirect()和abort()方法用于实现重定向和错误处理。
from flask import redirect, abort
@app.route('/redirect-me')
def redirect_example():
return redirect('/')
@app.route('/abort-example')
def abort_example():
abort(404)
会话 (Session)
Flask支持基于Cookie的会话管理,默认情况下会对会话内容进行签名,防止篡改。
from flask import session
app.secret_key = 'supersecretkey'
@app.route('/set-session')
def set_session():
session['username'] = 'john'
return 'Session set'
@app.route('/get-session')
def get_session():
username = session.get('username')
return f'Logged in as {username}'
Flask的特点
- 轻量级和灵活性:Flask不强制使用特定的工具或库,开发者可以自由选择数据库、模板引擎或ORM等。它没有像Django那样的大而全的功能,而是提供最小化的核心框架,适合开发小型应用或原型。
- 易于扩展:Flask允许通过扩展机制添加功能,官方和社区都有大量扩展,如数据库 ORM、表单处理、用户认证等。它的模块化设计使其更容易根据需求定制。
- Jinja2 模板引擎:Flask内置Jinja2模板引擎,它允许在HTML页面中嵌入Python表达式和控制流语句,方便生成动态内容。
- WSGI 兼容:Flask遵循WSGI标准,这使得它可以与多种WSGI服务器,如Gunicorn、uWSGI 等,并能无缝集成各种中间件。
- 简单的路由系统:Flask提供了一个简单的路由系统,开发者只需要装饰函数就可以将其映射到特定的URL路径。
- 开发者友善:Flask 支持集成的开发服务器和调试器(debug 模式),方便在开发过程中快速定位问题。它还支持热重载,即修改代码后服务器自动重启。
- 蓝图 (Blueprints):Flask 通过蓝图机制实现模块化开发。蓝图类似于应用中的子应用,可以将不同功能模块拆分为独立的组件,便于大型应用的组织和维护。
总结
Flask是一个灵活且易于使用的框架,它为开发者提供了简洁、清晰的API,同时也能通过扩展满足更多复杂的需求。适合开发从简单的API到中等复杂的Web应用程序。如果你想要快速开发并对框架有较大的控制权,那么Flask是一个不错的选择。


