1.Flask 简介
Flask 是一个轻量级的 Python Web 框架,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎开发。它以简洁、灵活著称,适合快速构建小型到中型 Web 应用或作为微服务框架使用。
核心特点
轻量级:核心功能精简,可通过扩展灵活添加其他功能(如数据库支持、表单验证等)。
易于学习:代码结构直观,适合初学者快速上手。
模块化设计:通过扩展(如 Flask-SQLAlchemy、Flask-Login)集成额外功能。
开发友好:内置开发服务器和调试器,支持热重载。
基本组件
1.路由(Routing):通过装饰器 @app.route() 定义 URL 规则和处理函数。
python
@app.route('/')
def home():
return "Hello, Flask!"
2.模板引擎(Jinja2):支持动态 HTML 渲染。
3.请求与响应 :通过 request 和 response 对象处理 HTTP 数据。
python
from flask import request
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
return f"User {username} logged in."
安装与运行
1.安装 Flask:
python
pip install flask
2.最小应用示例:
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run(debug=True)
打开127.0.0.1:5000的结果:
常见扩展
- Flask-SQLAlchemy:集成 SQLAlchemy 实现数据库操作。
- Flask-WTF:处理 Web 表单及验证。
- Flask-Login:管理用户认证和会话。
适用场景
Flask 的灵活性和简洁性使其成为 Python Web 开发的热门选择,尤其适合需要高度定制化的项目。
2.接下来介绍一个基于Flask写的异步任务处理接口
1)导入需要的工具
python
from flask import Flask, request, jsonify
import time
import threading
from concurrent.futures import ThreadPoolExecutor
import requests
Flask:做网站 / 接口的框架
jsonify:返回 JSON 格式数据(给接口用)
threading:多线程(后台同时跑多个任务)
ThreadPoolExecutor:线程池(控制最多跑几个任务)
requests:调用别的接口
2)创建 Flask 服务 + 中文不乱码配置
python
app = Flask(__name__)
app.json.ensure_ascii = False
app.config['JSONIFY_MIMETYPE'] = "application/json; charset=utf-8"
创建服务
让中文不乱码(你刚才问的就是这个)
3)全局变量:锁、线程池、任务状态
python
lock = threading.Lock()
executor = ThreadPoolExecutor(max_workers=2)
task_status = {}
lock:防止多线程同时改数据出错
executor:最多同时跑 2 个任务
task_status:存所有任务的状态(排队中 / 分析中 / 完成)
4)三个测试接口:API1、API2、API3
python
/api1
/api2
/api3
作用:模拟耗时任务(每个等 5 秒)用来测试:任务在后台慢慢跑。
5)核心:真正执行任务的函数
python
def run_task(test):
作用:
把任务状态改成 分析中
依次调用 API1、API2、API3
全部跑完 → 状态改成 完成
这就是后台异步执行的逻辑。
6)提交任务的接口
python
/submit?test=任务名
你访问这个接口 → 提交任务 → 放进线程池 → 后台自动跑
返回:
python
{
"code": 200,
"msg": "任务已提交到线程池",
"test": "任务1",
"状态": "paiduzhong"
}
7)查看任务状态的接口
python
/status
返回所有任务当前进度:
排队中
分析中
完成
8)启动服务
python
app.run(host="0.0.0.0", port=5000)
启动网站服务,端口 5000
它能实现什么效果?(你运行后就能看到)
- 访问
/submit?test=课堂1→ 提交任务 - 后台自动调用 API1、API2、API3(每个等 5 秒)
- 访问
/status→ 看到任务是:paiduzhong排队中fenxizhong分析中wancheng完成