Flask 是一个轻量级的 Python Web 开发框架,它易于上手,适合构建小型到中型的 Web 应用。在这一章节中,我们将详细介绍 Flask 的基本概念、组件和用法。为了便于理解,我们将使用实例来展示如何使用 Flask 构建一个简单的 Web 应用。
首先,使用 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!”。
在 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”。
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“。
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
模板渲染页面。
通常,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>
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,建议阅读官方文档和其他教程。
祝你学习愉快!