Python Web开发:Flask轻量级框架快速上手

一、什么是Flask?

在开始之前,我们先来理解一下“Web框架”是什么。简单来说,Web框架就是帮你快速开发网站或Web应用的工具集合,它封装了很多重复的工作(比如处理HTTP请求、路由管理、模板渲染等),让你专注于业务逻辑。

Flask是一个轻量级的Python Web框架,由Armin Ronacher开发。它的特点是:

  • 轻量灵活:没有强制的项目结构和组件,你可以按需添加功能。
  • 学习成本低:语法简洁,适合初学者快速上手。
  • 扩展性强:可以通过扩展(如Flask-SQLAlchemy处理数据库、Flask-Login处理用户认证)实现更复杂的功能。

如果你想快速搭建一个小型网站、API接口,或者作为学习Web开发的起点,Flask是非常好的选择。

二、环境搭建

安装Flask

首先确保你的电脑已经安装了Python(推荐Python 3.6+)。打开命令行工具,执行以下命令安装Flask:

pip install flask

安装完成后,可以通过以下命令验证是否安装成功:

flask --version

如果显示类似 Flask 2.3.3, Python 3.9.7 的信息,说明安装成功。

三、第一个Flask应用

编写“Hello World”

创建一个新的Python文件(比如 app.py),写入以下代码:

from flask import Flask

# 创建Flask应用实例
app = Flask(__name__)

# 定义路由:当访问根路径 '/' 时,执行下面的函数
@app.route('/')
def index():
    return "Hello, Flask!"  # 返回响应内容

# 启动应用(仅在直接运行该文件时生效)
if __name__ == '__main__':
    app.run(debug=True)  # debug=True 开启调试模式(开发时用,生产环境关闭)

运行应用

在命令行中进入 app.py 所在的目录,执行:

python app.py

然后打开浏览器访问 http://127.0.0.1:5000,你会看到页面显示 Hello, Flask!

代码解析

  • Flask(__name__):创建应用实例,__name__ 是Python内置变量,表示当前模块的名称,Flask用它来定位资源路径。
  • @app.route('/')路由装饰器,将URL路径 / 与下面的函数 index() 绑定。当用户访问 / 时,会自动执行 index() 函数。
  • app.run(debug=True):启动Flask开发服务器,debug=True 会在代码修改后自动重启服务器,并显示错误信息(生产环境需关闭)。

四、路由与视图函数

基本路由

路由是URL与函数的映射关系。除了根路径 /,你还可以定义其他路径:

@app.route('/about')  # 访问 http://127.0.0.1:5000/about
def about():
    return "关于我们的页面"

@app.route('/user/<username>')  # 带参数的路由,<username> 是动态参数
def user_profile(username):
    return f"欢迎 {username} 的个人主页"

访问 http://127.0.0.1:5000/user/张三,页面会显示 欢迎 张三 的个人主页

路由参数类型

Flask支持多种参数类型,比如整数、浮点数、路径等:

@app.route('/post/<int:post_id>')  # post_id 必须是整数
def show_post(post_id):
    return f"你查看的文章ID是:{post_id}"

@app.route('/path/<path:subpath>')  # 包含斜杠的路径
def show_path(subpath):
    return f"路径参数:{subpath}"

五、模板引擎(Jinja2)

静态的HTML页面无法满足动态内容需求,Flask使用Jinja2模板引擎来渲染动态HTML。

创建模板文件

  1. 在项目根目录下创建一个 templates 文件夹(Flask会自动识别该文件夹)。
  2. templates 中新建 index.html 文件,内容如下:
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>  <!-- 渲染变量 -->
</head>
<body>
    <h1>Hello, {{ name }}!</h1>  <!-- 渲染name变量 -->
    {% if age > 18 %}  <!-- 条件判断 -->
        <p>你已成年</p>
    {% else %}
        <p>你未成年</p>
    {% endif %}
    <ul>
        {% for item in hobbies %}  <!-- 循环 -->
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

在视图函数中渲染模板

修改 app.py,使用 render_template 渲染模板:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    # 传递数据给模板
    data = {
        'title': '首页',
        'name': '小明',
        'age': 20,
        'hobbies': ['编程', '阅读', '运动']
    }
    return render_template('index.html', **data)  # **data 表示解包字典

if __name__ == '__main__':
    app.run(debug=True)

现在访问 http://127.0.0.1:5000,页面会根据传递的变量动态渲染内容。

六、静态文件处理

网站的图片、CSS、JavaScript等静态资源需要放在 static 文件夹中。

示例:引入CSS文件

  1. 在项目根目录创建 static 文件夹,再在 static 中创建 style.css
h1 {
    color: red;
    font-size: 24px;
}
  1. templates/index.html 中引入CSS:
<head>
    <title>{{ title }}</title>
    <!-- 引入静态文件:url_for('static', filename='style.css') -->
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>

此时页面的标题文字会变成红色,说明CSS生效了。

七、处理请求与响应

获取请求参数

Flask通过 request 对象获取请求数据(需先导入):

from flask import request, render_template

@app.route('/greet', methods=['GET', 'POST'])  # 允许GET和POST请求
def greet():
    if request.method == 'POST':  # 判断请求方法
        name = request.form.get('name')  # 获取POST表单数据
        return render_template('greet.html', name=name)
    else:
        return render_template('greet.html')  # GET请求返回空表单

返回JSON和重定向

  • 返回JSON:使用 jsonify(需导入):
from flask import jsonify

@app.route('/api/data')
def api_data():
    data = {'name': 'Flask', 'version': '2.3.3'}
    return jsonify(data)  # 返回JSON格式数据
  • 重定向:使用 redirect(需导入):
from flask import redirect, url_for

@app.route('/old')
def old_page():
    return redirect(url_for('index'))  # 重定向到index页面

八、综合小项目示例

创建一个简单的“个人博客首页”,包含以下功能:
- 显示欢迎信息和用户列表
- 支持用户提交留言(POST请求)
- 渲染动态内容(使用模板)

步骤1:修改模板结构

templates 中新增 blog.html

<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>{{ blog_title }}</h1>
    <h2>用户列表</h2>
    <ul>
        {% for user in users %}
            <li>{{ user }}</li>
        {% endfor %}
    </ul>

    {% if message %}  <!-- 显示留言 -->
        <div class="message">{{ message }}</div>
    {% endif %}

    <form method="POST">
        <input type="text" name="username" placeholder="输入用户名">
        <button type="submit">提交</button>
    </form>
</body>
</html>

步骤2:编写视图函数

修改 app.py

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/blog', methods=['GET', 'POST'])
def blog():
    users = ['张三', '李四', '王五']  # 模拟用户列表
    message = None  # 留言内容

    if request.method == 'POST':
        username = request.form.get('username')
        message = f"收到留言:{username} 提交了信息!"

    return render_template('blog.html', 
                          blog_title='个人博客', 
                          users=users, 
                          message=message)

if __name__ == '__main__':
    app.run(debug=True)

效果演示

访问 http://127.0.0.1:5000/blog,可以看到用户列表,并能通过表单提交留言(留言会动态显示在页面上)。

九、总结与进阶方向

恭喜你完成了Flask入门!现在你已经掌握了:
- Flask的安装与基本使用
- 路由、视图函数、模板渲染
- 静态文件和模板引擎
- 请求参数处理和响应返回

后续学习方向:

  • 数据库操作:学习Flask-SQLAlchemy(ORM工具)
  • 用户认证:Flask-Login实现登录注册
  • RESTful API:使用Flask-RESTful构建接口
  • 部署上线:Gunicorn + Nginx 部署生产环境

Flask的官方文档(https://flask.palletsprojects.com/)是最好的学习资源,多动手实践才能快速掌握!

Xiaoye