简体   繁体   English

Flask-RESTplus 中的响应类

[英]Response class in Flask-RESTplus

What is the proper way to handle response classes in Flask-RESTplus?在 Flask-RESTplus 中处理响应类的正确方法是什么? I am experimenting with a simple GET request seen below:我正在试验一个简单的 GET 请求,如下所示:

i_throughput = api.model('Throughput', {
    'date': fields.String,
    'value': fields.String    
})

i_server = api.model('Server', {
    'sessionId': fields.String,
    'throughput': fields.Nested(i_throughput)
})

@api.route('/servers')
class Server(Resource):
    @api.marshal_with(i_server)
    def get(self):
        servers = mongo.db.servers.find()
        data = []
        for x in servers:
            data.append(x)

        return data

I want to return my data in as part of a response object that looks like this:我想将我的数据作为响应对象的一部分返回,如下所示:

{
  status: // some boolean value
  message: // some custom response message
  error: // if there is an error store it here
  trace: // if there is some stack trace dump throw it in here
  data: // what was retrieved from DB
}

I am new to Python in general and new to Flask/Flask-RESTplus.我一般是 Python 新手,也是 Flask/Flask-RESTplus 的新手。 There is a lot of tutorials out there and information.那里有很多教程和信息。 One of my biggest problems is that I'm not sure what to exactly search for to get the information I need.我最大的问题之一是我不确定要准确搜索什么才能获得我需要的信息。 Also how does this work with marshalling?另外这如何与编组一起工作? If anyone can post good documentation or examples of excellent API's, it would be greatly appreciated.如果有人可以发布优秀的 API 的良好文档或示例,将不胜感激。

https://blog.miguelgrinberg.com/post/customizing-the-flask-response-class https://blog.miguelgrinberg.com/post/customizing-the-flask-response-class

from flask import Flask, Response, jsonify

app = Flask(__name__)

class CustomResponse(Response):
    @classmethod
    def force_type(cls, rv, environ=None):
        if isinstance(rv, dict):
            rv = jsonify(rv)
        return super(MyResponse, cls).force_type(rv, environ)

app.response_class = CustomResponse

@app.route('/hello', methods=['GET', 'POST'])
def hello():
    return {'status': 200, 'message': 'custom_message', 
            'error': 'error_message', 'trace': 'trace_message', 
            'data': 'input_data'}

result结果

import requests
response = requests.get('http://localhost:5000/hello')
print(response.text)

{
  "data": "input_data",
  "error": "error_message",
  "message": "custom_message",
  "status": 200,
  "trace": "trace_message"
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM