Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它的设计目标是严格遵循“小即是美”的哲学,支持扩展,提供了常用的 Web 开发功能,例如路由、请求和响应的处理、模板引擎等。如果你熟悉 Python,并且想要快速构建 Web 应用,Flask 是一个很好的选择。
一、安装 Flask
使用 Flask 的第一步是安装。Flask 可以在 Python 2 和 Python 3 中使用。可以通过 pip 来安装 Flask,命令如下:
pip install Flask
二、创建 Flask 应用程序
Flask 应用程序是一个包含“视图函数”的 Python 模块。视图函数的作用是处理从客户端发来的 HTTP 请求,并返回 HTTP 响应。创建 Flask 应用程序的步骤如下: 1. 创建 Python 文件,例如 hello.py; 2. 导入 Flask 模块; 3. 创建一个 Flask 应用程序实例; 4. 定义一个或多个视图函数。 代码如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!
"
在这个示例中,我们导入了 Flask 模块,创建了一个 Flask 应用程序实例,然后定义了一个视图函数 hello()。这个函数使用装饰器 `@app.route("/")` 指定了请求的 URL 是根目录(/),返回值是一个字符串。
三、运行 Flask 应用程序
创建 Flask 应用程序后,还需要运行它。Flask 应用程序可以在不同的服务器环境中运行,例如内置服务器(仅用于开发环境)、Gunicorn、uWSGI、Apache、Nginx 等。在开发环境中可以直接通过 Python 命令运行,命令如下:
export FLASK_APP=hello.py
flask run
这个命令会启动内置服务器,监听本地的 5000 端口,可以在浏览器中打开 http://localhost:5000 访问。
四、路由
路由是指应用程序如何响应请求。在 Flask 中,路由是通过装饰器来实现的,例如 `@app.route("/")`。Flask 支持不同的 URL 规则,例如静态路由、动态路由、重定向等。 静态路由的格式如下:
@app.route("/about")
def about():
return "About Us
"
动态路由的格式如下:
@app.route("/user/")
def user(username):
return "
Hello, %s
" % username
在这个示例中,`
` 表示一个变量,可以通过函数参数来获取。例如访问 http://localhost:5000/user/john 会返回 `
Hello, john
`。
五、请求和响应
Flask 应用程序可以处理不同类型的 HTTP 请求,例如 GET、POST、PUT、DELETE 等。默认情况下,Flask 应用程序只处理 GET 请求。可以使用 `methods` 属性来指定允许的请求类型,例如 `methods=['GET', 'POST']`。 Flask 应用程序返回的是 HTTP 响应,最常见的是 HTML 页面。可以使用 Flask 提供的模板引擎来生成 HTML 页面。例如,下面的代码使用 Jinja2 模板引擎来生成 HTML 页面:
from flask import render_template
@app.route("/hello")
def hello():
return render_template('hello.html', name='John')
在这个示例中,我们导入了 render_template 函数,用于读取名为 hello.html 的模板文件,替换其中的变量 {{ name }},最终生成 HTML 页面。
六、表单处理
表单是 Web 应用程序中重要的交互方式之一。Flask 应用程序可以通过 Flask 提供的 request 对象来访问表单数据。例如,下面的代码处理了一个登录表单:
from flask import request
@app.route("/login", methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# do something with username and password
return "login successfully"
else:
return render_template("login.html")
在这个代码中,我们判断表单提交的方法是否为 POST,如果是,则从表单中提取 username 和 password。如果不是,就显示名为 login.html 的表单。
七、Flask 扩展
Flask 通过扩展提供了很多有用的功能。这些扩展可以提供数据库访问、表单验证、身份验证、邮件发送等功能。其中一些扩展是官方支持的,例如 Flask-SQLAlchemy、Flask-WTF,还有很多由社区提供的扩展。 例如,Flask-SQLAlchemy 是一个 Flask 的扩展,用于访问数据库。可以通过 pip 安装 Flask-SQLAlchemy,并使用它提供的 SQLAlchemy 对象来访问数据库,例如:
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '' % self.username
在这个代码中,我们创建了一个名为 test.db 的 SQLite 数据库,并定义了一个 User 类,用于映射数据库表。使用 Flask-SQLAlchemy,我们可以使用常见的 ORM 模式来访问数据库,例如查询、插入、更新、删除等操作。
八、总结
本文介绍了 Flask 框架的核心功能和使用方法。Flask 是一个非常灵活的框架,可以根据需要自由配置和扩展。如果你需要快速地构建 Web 应用程序,并且熟悉 Python 语言,Flask 是一个很好的选择。