相关疑难解决方法(0)

Flask:通过Response对象发送数据和状态代码

我正在Flask中编写微服务,通过API互相交流.

在发出POST请求时,我可以通过Response对象返回状态代码.有没有办法可以将此函数的数据作为JSON返回?

from flask import Flask, Response

@app.route('/login', methods=['POST'])
def login():
   # Set the status code
   response = Response(status=200)

   # How can I return a JSON in my response object as {'username': 'febin'} ?

   return response
Run Code Online (Sandbox Code Playgroud)

json response flask

16
推荐指数
2
解决办法
3万
查看次数

在对(烧瓶 - 静止)GET API调用进行单元测试时获得500内部服务器错误

我已经从我的烧瓶式API模块中单独测试了所有方法.现在我想通过实际进行API调用来测试get方法.我期待这个测试的错误400.

我的资源类

class Response(Resource):

    @marshal_with(response_params_get_responses_on_job)
    def get(self, filter_name=None):
        try:
            response = self.process_get_request(filter_name)
            if not response['users']:
                raise MyValidationError("No data found")
            return response
        except MyValidationError as err:
            abort(404, message=err)
        except ValueError as mistake:
            abort(400, message=mistake)
Run Code Online (Sandbox Code Playgroud)

我的单位测试

# TODO - Failing!
@mock.patch('application.resources.response.Response.process_get_request', autospec=True)
def test_get_400(self, process_get_request_mock):
    process_get_request_mock.side_effect = ValueError("some error")
    app = Flask(__name__)
    app.debug = True
    api = Api(app, prefix='/api/v2')
    api.add_resource(Response, '/user/responses', endpoint='job_responses')
    api.init_app(app)
    with app.test_client() as client:
        resp = client.get('/api/v2/user/responses',
                          environ_base={'HTTP_USER_AGENT': 'Chrome'},
                      headers={'Content-type': 'application/json'})
        self.assertEqual(resp.status_code, 400)
Run Code Online (Sandbox Code Playgroud)

我的测试失败,因为我得到的响应是错误500

AssertionError: 500 != 400
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪 …

python unit-testing mocking flask-restful

5
推荐指数
1
解决办法
2235
查看次数

Flask - 中止时的自定义错误消息

我希望能够使用 Flask 中的 abort() 显示自定义错误消息。我遇到了一个不寻常的情况,我遇到了麻烦。我的代码如下。

from flask import Flask, abort, jsonify, make_response, request

app = Flask(__name__)

@app.errorhandler(400)
def custom400(error):
    return make_response(jsonify({'message': error.description}), 400)

@app.route('/test', methods=['POST'])
def test():
    abort(400, 'custom error message')

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但如果我尝试访问任何表单数据,其行为会有所不同,因为我无法访问自定义错误消息。

def test():
    a = request.form['some_value']
    abort(400, 'custom error message')
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这种情况呢?这是 Flask 的错误吗?

注意:上面的代码取自如何在使用自定义错误处理程序时从中止命令访问错误消息

flask python-3.x

5
推荐指数
1
解决办法
1万
查看次数