本文目录导读:
我来为您整理Python Flask的各种返回案例实现:
基础字符串返回
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
@app.route('/text')
def text_response():
return "这是纯文本响应", 200 # 可以指定状态码
HTML响应
from flask import Flask
app = Flask(__name__)
@app.route('/html')
def html_response():
return '''
<h1>HTML响应</h1>
<p>这是HTML格式的响应</p>
'''
@app.route('/template')
def template_response():
from flask import render_template
return render_template('index.html', name='Flask')
JSON响应
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/json')
def json_response():
data = {
'name': '张三',
'age': 25,
'city': '北京'
}
return jsonify(data)
@app.route('/list')
def list_response():
users = [
{'id': 1, 'name': '张三'},
{'id': 2, 'name': '李四'}
]
return jsonify(users)
文件下载
from flask import Flask, send_file, send_from_directory
import os
app = Flask(__name__)
@app.route('/download')
def download_file():
return send_file('file.pdf', as_attachment=True)
@app.route('/download/<filename>')
def download(filename):
return send_from_directory('uploads', filename, as_attachment=True)
@app.route('/image')
def get_image():
return send_file('image.jpg', mimetype='image/jpeg')
设置响应头
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/custom-header')
def custom_header():
response = make_response('自定义响应头')
response.headers['X-Custom-Header'] = 'CustomValue'
response.headers['Content-Type'] = 'text/plain; charset=utf-8'
return response
@app.route('/json-header')
def json_header():
response = make_response('{"message": "成功"}')
response.headers['Content-Type'] = 'application/json'
response.headers['Access-Control-Allow-Origin'] = '*'
return response
设置Cookie
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/set-cookie')
def set_cookie():
response = make_response('Cookie已设置')
response.set_cookie('username', '张三', max_age=3600) # 1小时过期
return response
@app.route('/set-cookies')
def set_cookies():
response = make_response('多个Cookie已设置')
response.set_cookie('token', 'abc123', httponly=True)
response.set_cookie('theme', 'dark', path='/')
return response
重定向
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/redirect')
def redirect_example():
return redirect('https://www.example.com')
@app.route('/redirect-internal')
def redirect_internal():
return redirect(url_for('target_page'))
@app.route('/redirect-status')
def redirect_with_status():
return redirect('/new-page', 301) # 301永久重定向
@app.route('/target')
def target_page():
return "这是目标页面"
状态码和错误处理
from flask import Flask, abort, jsonify
app = Flask(__name__)
@app.route('/not-found')
def not_found():
abort(404)
@app.route('/forbidden')
def forbidden():
return "禁止访问", 403
@app.route('/created')
def created():
return jsonify({'id': 1}), 201
# 自定义错误处理器
@app.errorhandler(404)
def not_found_error(error):
return jsonify({
'error': '资源未找到',
'status': 404
}), 404
@app.errorhandler(500)
def internal_error(error):
return jsonify({
'error': '服务器内部错误',
'status': 500
}), 500
流式响应
from flask import Flask, Response, stream_with_context
import time
app = Flask(__name__)
@app.route('/stream')
def stream_response():
def generate():
for i in range(10):
yield f"数据: {i}\n"
time.sleep(0.5)
return Response(stream_with_context(generate()),
mimetype='text/plain')
@app.route('/large-data')
def large_data():
def generate_large():
for i in range(1000):
yield f"line {i}\n"
return Response(generate_large(), mimetype='text/plain')
完整示例:用户API
from flask import Flask, jsonify, request, make_response
app = Flask(__name__)
@app.route('/api/users', methods=['GET', 'POST'])
def users():
if request.method == 'GET':
# 获取用户列表
users = [
{'id': 1, 'name': '张三', 'email': 'zhang@example.com'},
{'id': 2, 'name': '李四', 'email': 'li@example.com'}
]
return jsonify({
'status': 'success',
'data': users,
'count': len(users)
}), 200
elif request.method == 'POST':
# 创建新用户
data = request.get_json()
if not data or 'name' not in data:
return jsonify({
'status': 'error',
'message': '请提供用户名'
}), 400
return jsonify({
'status': 'success',
'message': '用户创建成功',
'data': {'id': 3, 'name': data['name']}
}), 201
if __name__ == '__main__':
app.run(debug=True)
Flask返回响应的主要方式:
- 直接返回:字符串、HTML、JSON等
- 使用
jsonify():返回JSON格式 - 使用
make_response():自定义响应 - 使用
send_file():文件下载 - 使用
redirect():重定向 - 使用
abort():错误处理 - 使用
Response对象:实现流式响应
根据不同的业务需求选择合适的返回方式。
标签: 案例实现