PythonFlask返回案例实现?

wen python案例 1

本文目录导读:

  1. 基础字符串返回
  2. HTML响应
  3. JSON响应
  4. 文件下载
  5. 设置响应头
  6. 设置Cookie
  7. 重定向
  8. 状态码和错误处理
  9. 流式响应
  10. 完整示例:用户API

我来为您整理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返回响应的主要方式:

  1. 直接返回:字符串、HTML、JSON等
  2. 使用jsonify():返回JSON格式
  3. 使用make_response():自定义响应
  4. 使用send_file():文件下载
  5. 使用redirect():重定向
  6. 使用abort():错误处理
  7. 使用Response对象:实现流式响应

根据不同的业务需求选择合适的返回方式。

标签: 案例实现

抱歉,评论功能暂时关闭!