在Web开发中,路由与视图是两个核心概念。路由决定了URL模式与服务器上的特定函数之间的映射关系,而视图则是处理这些请求并返回响应的函数。在Flask框架中,通过路由与视图的结合,我们可以轻松构建出功能丰富的Web应用。本文将介绍Flask中的路由与视图机制,并帮助你构建你的第一个Flask Web应用。
一、Flask路由基础
在Flask中,路由是通过装饰器@app.route()
来定义的。装饰器是一个修改其他函数行为的函数,它接受一个函数作为参数,并返回一个新函数。在Flask中,@app.route()
装饰器将一个URL模式与一个视图函数关联起来。
下面是一个简单的例子,演示了如何定义一个路由:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Welcome to my Flask app!'
if __name__ == '__main__':
app.run(debug=True)
在上面的代码中,@app.route('/')
定义了一个路由,它将根URL(/
)映射到名为index
的视图函数。当用户访问应用的根URL时,Flask会调用index
函数,并将函数的返回值作为HTTP响应返回给客户端。
二、动态路由
除了静态路由外,Flask还支持动态路由。动态路由允许我们在URL中包含可变部分,并将其作为参数传递给视图函数。这对于构建具有不同参数的URL非常有用。
下面是一个使用动态路由的例子:
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username} Profile'
if __name__ == '__main__':
app.run(debug=True)
在上面的代码中,<username>
是一个动态部分,它可以匹配任何文本。当用户访问形如/user/john
的URL时,Flask会将john
作为参数传递给show_user_profile
函数,并在响应中显示User john Profile
。
三、构建你的第一个Web应用
现在,让我们利用Flask的路由与视图机制来构建一个简单的Web应用。假设我们要创建一个显示待办事项列表的应用。
首先,创建一个新的Python文件,命名为todo_app.py
,并导入Flask类:
from flask import Flask, render_template
app = Flask(__name__)
接下来,定义一个路由和视图函数来显示待办事项列表:
@app.route('/')
def todo_list():
todos = ['Buy milk', 'Do laundry', 'Write blog post']
return render_template('todo_list.html', todos=todos)
在这个例子中,我们定义了一个名为todo_list
的视图函数,它返回一个待办事项列表。我们使用render_template
函数来渲染一个HTML模板,并将待办事项列表传递给模板。
然后,你需要创建一个HTML模板来显示待办事项列表。在todo_app.py
所在的同一目录下,创建一个名为templates
的文件夹(如果尚未创建),并在其中创建一个名为todo_list.html
的HTML文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Todo List</title>
</head>
<body>
<h1>My Todo List</h1>
<ul>
{% for todo in todos %}
<li>{
{ todo }}</li>
{% endfor %}
</ul>
</body>
</html>
在上面的HTML模板中,我们使用Jinja2模板引擎的语法来遍历待办事项列表,并显示每个待办事项。
最后,添加代码来运行Flask应用:
if __name__ == '__main__':
app.run(debug=True)
现在,保存todo_app.py
文件,并在命令行中运行它:
python todo_app.py
Flask开发服务器将启动,并监听默认的端口。打开浏览器,访问http://127.0.0.1:5000/
,你将看到一个显示待办事项列表的Web页面。
通过这个简单的例子,你学习了如何在Flask中定义路由和视图函数,并使用模板渲染HTML页面。你可以根据自己的需求扩展这个应用,添加更多的