Flask 是一个轻量级的 Python Web 开发框架,它易于上手,适合构建小型到中型的 Web 应用。在这一章节中,我们将详细介绍 Flask 的基本概念、组件和用法。为了便于理解,我们将使用实例来展示如何使用 Flask 构建一个简单的 Web 应用。
9.2.1 安装和创建 Flask 应用
首先,使用 pip 安装 Flask:
pip install flask
接下来,创建一个名为 app.py
的文件,输入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
这个简单的程序创建了一个 Flask 应用,并定义了一个根路由(/
),该路由将返回 “Hello, World!”。运行 app.py
:
python app.py
打开浏览器,访问 http://127.0.0.1:5000/
,你将看到 “Hello, World!”。
9.2.2 路由和视图函数
在 Flask 中,路由是 URL 到 Python 函数的映射。视图函数是处理特定路由的请求的函数。以下是一个带有两个路由的示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'This is the index page.'
@app.route('/hello')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
这个例子中,我们定义了两个路由:/
和 /hello
。访问对应的 URL 时,将显示相应的视图函数返回的内容。
路由变量
你可以在路由中使用 <variable>
的形式定义变量,这样可以将 URL 的一部分作为参数传递给视图函数。例如:
@app.route('/user/<username>')
def show_user_profile(username):
return f'User: {username}'
在这个例子中,访问 /user/<username>
(如 /user/john
)将显示 “User: john”。
9.2.3 请求和响应
Flask 提供了 request
对象,用于访问请求数据,如表单、查询参数、文件等。以下是一个处理表单提交的示例:
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return f'Welcome, {request.form["username"]}'
else:
return '''
<form method="post">
<p>Username: <input type="text" name="username"></p>
<p>Password: <input type="password" name="password"></p>
<p><input type="submit" value="Login"></p>
</form>
'''
if __name__ == '__main__':
app.run()
在这个例子中,我们定义了一个 /login
路由,该路由接受 GET 和 POST 请求。当用户访问 /login
时,将显示一个登录表单。填写表单并提交后,将显示 ”Welcome, username“。
9.2.4 模板
Flask 使用 Jinja2 模板引擎来生成动态 HTML。首先,创建一个名为 templates
的文件夹,然后在其中创建一个名为 login.html
的文件,内容如下:
<form method="post">
<p>Username: <input type="text" name="username"></p>
<p>Password: <input type="password" name="password"></p>
<p><input type="submit" value="Login"></p>
</form>
修改 app.py
,使用 render_template
函数渲染模板:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return f'Welcome, {request.form["username"]}'
else:
return render_template('login.html')
if __name__ == '__main__':
app.run()
现在,当用户访问 /login
时,将使用 login.html
模板渲染页面。
9.2.5 静态文件
通常,Web 应用需要提供一些静态文件,如 CSS、JavaScript 和图像文件。在 Flask 中,将这些文件放在名为 static
的文件夹中。例如,创建一个名为 main.css
的 CSS 文件,将其放在 static/css
文件夹中。
在模板中,使用 url_for
函数生成静态文件的 URL。修改 login.html
,添加一个链接到 main.css
的样式表:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
</head>
<body>
<form method="post">
<p>Username: <input type="text" name="username"></p>
<p>Password: <input type="password" name="password"></p>
<p><input type="submit" value="Login"></p>
</form>
</body>
</html>
9.2.6 错误处理
Flask 允许你为特定的 HTTP 错误代码定义自定义错误处理程序。这对于显示友好的错误页面非常有用。例如,下面是一个处理 404(未找到)错误的示例:
from flask import Flask, render_template
app = Flask(__name__)
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
if __name__ == '__main__':
app.run()
在这个例子中,我们定义了一个名为 page_not_found
的错误处理程序,用于处理 404 错误。当用户访问不存在的页面时,将显示一个自定义的 404 页面。
小结
这一章节介绍了 Flask 的基本概念和用法,包括路由、请求、响应、模板和静态文件。通过这些概念,你可以使用 Flask 构建一个基本的 Web 应用。当然,Flask 还有许多其他功能,如蓝图(用于组织大型应用)、扩展(用于添加额外功能)以及对数据库的支持等。这里只是为你提供了一个入门,要深入了解 Flask,建议阅读官方文档和其他教程。
祝你学习愉快!