Flask 详细介绍及高级用法

1. 介绍

Flask 是一个用 Python 编写的轻量级 Web 框架,由 Armin Ronacher 开发,基于 Werkzeug 工具箱和 Jinja2 模板引擎。Flask 的设计理念是“微框架”,即提供核心功能,其他功能通过扩展来实现。这使得 Flask 非常适合快速开发小型到中型的 Web 应用程序。

2. 工作流程

Flask 的工作流程可以概括为以下几步:

  1. 浏览器发送请求
    用户通过浏览器向服务器发送请求,请求被发送到服务器监听的某个端口上的应用程序。

  2. 服务器接收请求
    服务器程序接收到请求后,将请求转发给具体处理该请求的程序。

  3. 解析请求并执行处理函数
    该程序解析请求,找到该请求对应的处理函数,并执行该函数。

  4. 返回响应
    处理函数的返回值被返回给服务器软件,服务器软件再将返回值发送回浏览器。

3. 使用
3.1 安装

首先,需要安装 Flask。可以使用 pip 来安装 Flask:

pip install Flask
3.2 使用文档

Flask 的官方文档非常详细,提供了丰富的使用指南和示例。你可以访问以下链接查看文档:

3.3 HTTP 方法

HTTP 方法(请求方法)用于定义客户端与服务器之间的交互类型。常见的 HTTP 方法包括:

  • GET:用于请求访问已经存在的资源,通常用于获取数据。
  • POST:用于向服务器发送数据,通常用于提交表单或上传文件。
  • PUT:用于更新服务器上的资源。
  • DELETE:用于删除服务器上的资源。
  • 其他方法:如 HEAD、OPTIONS、PATCH 等。
3.4 Flask 四步法

以下是使用 Flask 创建一个简单 Web 应用的基本步骤:

  1. 导入 Flask 模块

    from flask import Flask, request, render_template, redirect, url_for
    
  2. 创建 Flask 应用实例

    app = Flask(__name__)
    
  3. 定义路由及请求响应函数

    @app.route('/')
    def index():
        return 'Hello, World!'
    
    @app.route('/userinfo_submit', methods=['GET', 'POST'])
    def userinfo_submit():
        if request.method == 'POST':
            # 处理 POST 请求
            username = request.form['username']
            email = request.form['email']
            return f'User {username} with email {email} submitted successfully.'
        else:
            # 处理 GET 请求
            return render_template('form.html')
    
  4. 启动服务并监听端口

    if __name__ == '__main__':
        app.run(host='127.0.0.1', port=5000)
    
4. 高级用法
4.1 模板渲染

Flask 使用 Jinja2 模板引擎来渲染 HTML 页面。可以通过 render_template 函数来渲染模板文件。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    name = 'John Doe'
    return render_template('index.html', name=name)

templates 文件夹中创建 index.html 文件:

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>
4.2 表单处理

Flask 可以轻松处理表单数据。以下是一个简单的表单处理示例:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/form', methods=['GET', 'POST'])
def form():
    if request.method == 'POST':
        username = request.form['username']
        email = request.form['email']
        return f'User {username} with email {email} submitted successfully.'
    return render_template('form.html')

templates 文件夹中创建 form.html 文件:

<!DOCTYPE html>
<html>
<head>
    <title>Form</title>
</head>
<body>
    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email"><br><br>
        <button type="submit">Submit</button>
    </form>
</body>
</html>
4.3 数据库集成

Flask 可以与多种数据库集成,如 SQLite、MySQL、PostgreSQL 等。常用的 ORM 工具是 SQLAlchemy。

  1. 安装 SQLAlchemy

    pip install Flask-SQLAlchemy
    
  2. 配置数据库

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
    db = SQLAlchemy(app)
    
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
    
    @app.route('/')
    def index():
        users = User.query.all()
        return render_template('users.html', users=users)
    
    @app.route('/add_user', methods=['POST'])
    def add_user():
        username = request.form['username']
        email = request.form['email']
        new_user = User(username=username, email=email)
        db.session.add(new_user)
        db.session.commit()
        return redirect(url_for('index'))
    
    if __name__ == '__main__':
        db.create_all()
        app.run(host='127.0.0.1', port=5000)
    
  3. 创建模板文件

    templates 文件夹中创建 users.html 文件:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Users</title>
    </head>
    <body>
        <h1>Users</h1>
        <ul>
            {% for user in users %}
                <li>{{ user.username }} - {{ user.email }}</li>
            {% endfor %}
        </ul>
        <form method="post" action="/add_user">
            <label for="username">Username:</label>
            <input type="text" id="username" name="username"><br><br>
            <label for="email">Email:</label>
            <input type="email" id="email" name="email"><br><br>
            <button type="submit">Add User</button>
        </form>
    </body>
    </html>
    
5. 模型部署案例:垃圾分类

假设我们有一个简单的垃圾分类模型,需要通过 Flask 部署为 Web 服务。以下是一个完整的示例:

  1. 安装必要的库

    pip install Flask
    pip install tensorflow
    
  2. 创建 Flask 应用

    from flask import Flask, request, jsonify
    import tensorflow as tf
    from PIL import Image
    import numpy as np
    
    # 加载预训练模型
    model = tf.keras.models.load_model('path/to/your/model.h5')
    
    app = Flask(__name__)
    
    @app.route('/predict', methods=['POST'])
    def predict():
        if 'image' not in request.files:
            return jsonify({'error': 'No image uploaded'}), 400
    
        file = request.files['image']
        img = Image.open(file)
        img = img.resize((224, 224))  # 假设模型输入尺寸为 224x224
        img_array = np.array(img) / 255.0  # 归一化
        img_array = np.expand_dims(img_array, axis=0)  # 增加 batch 维度
    
        # 预测
        predictions = model.predict(img_array)
        predicted_class = np.argmax(predictions, axis=1)[0]
    
        class_names = ['可回收物', '有害垃圾', '湿垃圾', '干垃圾']
        result = {'predicted_class': class_names[predicted_class], 'confidence': float(predictions[0][predicted_class])}
    
        return jsonify(result)
    
    if __name__ == '__main__':
        app.run(host='127.0.0.1', port=5000)
    
  3. 运行应用

    保存上述代码为 app.py,然后在终端运行:

    python app.py
    
  4. 测试 API

    你可以使用 Postman 或 curl 来测试 API。例如,使用 curl:

    curl -X POST -F "image=@path/to/your/image.jpg" http://127.0.0.1:5000/predict
    

    如果一切正常,你应该会看到模型的预测结果。

6. 总结

Flask 是一个非常灵活和强大的 Web 框架,适合快速开发和部署各种 Web 应用程序。通过上述步骤,你可以轻松地创建一个基本的 Flask 应用,并将其扩展为更复杂的功能,如模型部署。希望这些信息对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值