Flask是一个轻量级的Python Web框架,以其简洁灵活的特点深受开发者喜爱。对于零基础的初学者来说,掌握路由与视图函数是学习Flask的第一步。本文将带你从安装Flask开始,逐步理解路由的定义、视图函数的作用,以及它们如何协同工作。
一、安装Flask¶
要开始使用Flask,首先需要安装它。确保你的电脑已安装Python(推荐3.6及以上版本),然后打开命令行工具,执行以下命令:
pip install flask
安装完成后,可以通过在Python终端执行import flask来验证是否安装成功(无报错即表示安装成功)。
二、第一个Flask应用:“Hello, Flask!”¶
让我们从最简单的示例开始,创建一个能返回“Hello, Flask!”的Web应用。新建一个Python文件(例如app.py),并输入以下代码:
# 导入Flask类
from flask import Flask
# 创建Flask应用实例,__name__是当前模块名,Flask会根据这个找到资源路径
app = Flask(__name__)
# 定义路由和视图函数
@app.route('/') # 装饰器:将URL路径'/'与下面的函数绑定
def index(): # 视图函数:处理用户请求的函数
return "Hello, Flask!" # 返回响应内容
# 启动开发服务器
if __name__ == '__main__':
app.run(debug=True) # debug=True:开启调试模式,代码修改后自动重启
运行这段代码:
python app.py
此时,Flask会启动一个本地开发服务器,默认地址是http://127.0.0.1:5000/。打开浏览器访问这个地址,你会看到页面显示“Hello, Flask!”。
三、路由:URL与函数的映射¶
路由是Flask中最重要的概念之一,它定义了用户请求的URL路径与处理该请求的视图函数之间的对应关系。可以理解为:“当用户访问某个URL时,Flask会自动调用对应的视图函数,并将函数返回的内容作为响应。”
1. 静态路由:固定路径¶
上面的示例中,@app.route('/')将根路径/映射到index函数。除了根路径,我们还可以定义其他固定路径,例如:
@app.route('/about') # 访问 http://127.0.0.1:5000/about
def about():
return "关于我们的页面"
@app.route('/contact') # 访问 http://127.0.0.1:5000/contact
def contact():
return "联系我们的页面"
此时,访问/about和/contact会分别触发about和contact函数,返回对应的内容。
2. 动态路由:带参数的路径¶
如果需要处理“变量路径”(例如访问不同用户的个人页面,如/user/Alice、/user/Bob),可以在路由中使用动态参数。语法是:<参数名>,并在视图函数中接收该参数。
@app.route('/user/<username>') # <username>是动态参数,可匹配任意字符串
def user_profile(username):
return f"欢迎访问 {username} 的个人主页!"
此时,当用户访问http://127.0.0.1:5000/user/Alice时,username参数会被赋值为"Alice",视图函数返回"欢迎访问 Alice 的个人主页!"。
注意:动态参数的类型可以显式指定(如整数、浮点数),例如:
@app.route('/post/<int:post_id>') # 仅匹配整数类型的post_id
def show_post(post_id):
return f"显示文章ID:{post_id}"
此时访问/post/123会返回文章ID 123,而访问/post/abc(非整数)会返回404错误(找不到路由)。
四、视图函数:处理请求与返回响应¶
视图函数是路由的“执行者”,它接收用户请求(如URL参数、表单数据等),处理后返回响应内容(网页、JSON、重定向等)。
1. 返回字符串或HTML¶
视图函数最基础的返回值是字符串。可以直接返回文本,也可以返回HTML内容:
@app.route('/')
def index():
# 返回纯文本
return "Hello, 文本!"
# 返回HTML内容(Flask会自动渲染HTML标签)
return "<h1>Hello, <em>HTML</em>!</h1>"
2. 处理HTTP方法¶
默认情况下,@app.route只接受GET请求(用于获取数据)。如果需要处理POST请求(用于提交数据,如表单),需在装饰器中显式指定methods参数:
@app.route('/login', methods=['GET', 'POST']) # 允许GET和POST方法
def login():
if request.method == 'POST': # 判断请求方法
# 处理表单提交逻辑(需导入request)
username = request.form.get('username')
return f"登录成功:{username}"
else:
# 显示登录表单(返回HTML表单)
return '''
<form method="post">
用户名:<input type="text" name="username">
<button type="submit">登录</button>
</form>
'''
注意:使用request对象需先导入:from flask import request。
3. 返回JSON数据¶
如果需要返回JSON格式的数据(如API接口),可以直接返回字典,Flask会自动转换为JSON并设置正确的响应头:
from flask import jsonify
@app.route('/api/data')
def api_data():
data = {
"name": "Flask",
"version": "2.0",
"features": ["轻量", "灵活", "易扩展"]
}
return jsonify(data) # 返回JSON格式响应
五、启动与调试¶
在开发阶段,使用app.run()启动Flask服务器。为了方便调试,建议开启debug=True(生产环境需关闭,避免安全风险):
if __name__ == '__main__':
app.run(debug=True) # 开启调试模式,代码修改后自动重启
此时,服务器会运行在本地http://127.0.0.1:5000/(端口5000,可通过port=8080修改)。
六、总结¶
路由与视图函数是Flask的核心基础,掌握它们你就能构建最简单的Web应用:
1. 路由通过@app.route定义URL与函数的映射关系;
2. 动态路由用<参数名>处理变量路径,视图函数接收参数;
3. 视图函数处理请求(获取数据、表单提交)并返回响应(文本、HTML、JSON等);
4. 需注意HTTP方法(GET/POST)的支持,通过methods参数指定。
练习建议:尝试创建一个包含“首页、用户页、登录页”的小项目,练习不同路由和视图函数的组合。
通过本文,你已初步掌握了Flask的路由与视图函数。接下来可以学习模板(渲染HTML文件)、静态文件(CSS/JS)等进阶内容,逐步构建更复杂的Web应用!