447 字
2 分钟
Python Flask的基础使用
2025-11-07
2025-12-20

1. Hello world#

# flask Hello world
from flask import Flask,request
app = Flask('app')
@app.route('/') # @app.get('/')
def main():
return 'Hello World!'
@app.route('/<name>')
def hello(name):
if age := request.args.get('age'):
return 'Hello {}, 你{}岁!'.format(name, age)
return "请求参数错误"
app.run(debug=True, port=9999, host="0.0.0.0")

如果需要外部访问,需要将 host 设置为 0.0.0.0 。

2. 获取全部参数#

设置header

DAY 213 Flask 1.1.2:request中存储参数的属性(form、args、data、json、files、values)使用简介 - DEJAVU_ERIC - 博客园

3. WSGI 方式启动#

[[WSGI]]

4. 内部接口调用#

flask内部接口调用

https://deepinout.com/flask/flask-questions/45_flask_how_to_set_request_args_with_flask_test_client.html

不会走 http 协议,而是内部的接口

# 可以是 post 等 http 方法
res = app.test_client().get("/api")
res.json # 返回内容

Flask (逐行显示输出) https://flask.net.cn/patterns/streaming.html

5. SSE#

直接用Response包装迭代器函数即可

from flask import Flask, render_template, Response
import random
import time
@app.route('/generate_numbers')
def generate_numbers():
def generate():
for _ in range(5):
number = random.randint(1, 100) # 生成随机数字
yield f"data: {number}\n\n" # 使用 Server-Sent Events (SSE) 格式发送数据
time.sleep(0.5) # 每隔 0.5 秒生成一个数字
yield "data: done\n\n" # 发送结束信号
headers = {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
}
return Response(generate(), headers=headers)

done 并不是 Server-Sent Events (SSE) 协议中规定的关键词或信号。它只是我们在实现中自定义的一个标识符,用于通知前端“数据发送完成”,在前端代码中,我们通过判断 event.data === 'done' 来决定何时关闭连接。

前端

// 创建 EventSource 连接
const eventSource = new EventSource('/generate_numbers');
eventSource.onmessage = (event) => {
if (event.data === 'done') {
// 请求完成,关闭连接并恢复按钮状态
eventSource.close();
console.log('Generation complete');
} else {
// 显示生成的数字
console.log('Generated number:', event.data);
}
};
eventSource.onerror = (error) => {
console.error('Error:', error);
eventSource.close();
console.log('Generation failed');
};

6. 参考资料#

Python Flask的基础使用
https://cloudsir.top/posts/python-flask/
作者
CloudSir
发布于
2025-11-07
许可协议
CC BY-NC-SA 4.0