Flask入门:零基础掌握路由与视图函数

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会分别触发aboutcontact函数,返回对应的内容。

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应用!

小夜