gpt4 book ai didi

python - flask.ext.restful -> reqparse

转载 作者:太空狗 更新时间:2023-10-30 00:15:06 24 4
gpt4 key购买 nike

我正在尝试使用此 reqparse 将有意义的验证发送回 Flask 应用程序中的客户。这是代码:

class ParserTest(Resource):

def get(self):
parser = reqparse.RequestParser();
parser.add_argument('not_sent_from_client', type=str, required=True,
help='This field is required',
location='form')
args = parser.parse_args()
return "ok"

restfulApi.add_resource(ParserTest, '/p')

当我 curl -v http://localhost:5000/p 时,我得到了这个响应:

* About to connect() to localhost port 5000 (#0)
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 5000 (#0) GET /api/v1/p HTTP/1.1 User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5 Host: localhost:5000 Accept:
*/*

* HTTP 1.0, assume close after body < HTTP/1.0 400 BAD REQUEST < Content-Type: text/html < Content-Length: 192 < Server: Werkzeug/0.8.3 Python/2.7.1 < Date: Sat, 22 Dec 2012 22:21:33 GMT < <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>400 Bad Request</title> <h1>Bad Request</h1> <p>The browser (or proxy) sent a request that this server could not understand.</p>
* Closing connection #0

错误信息去哪儿了?

当我将代码更改为:

def get(self):
try:
parser = reqparse.RequestParser();
parser.add_argument('not_sent_from_client', type=str, required=True,
help='This field is required',
location='form')
args = parser.parse_args()
except Exception as e:
pprint.pprint(getmembers(e))
return 'ok'

当我发出 GET 请求时,它被转储到标准输出...

[('__call__',   <bound method ClientDisconnected.__call__ of <ClientDisconnected '400: Bad Request'>>),  
('__class__', <class 'werkzeug.exceptions.ClientDisconnected'>),
('__delattr__', <method-wrapper '__delattr__' of ClientDisconnected object at 0x1065ca230>), ('__dict__', {'data': {'message': 'This field is required'}}),
('__doc__', 'Internal exception that is raised if Werkzeug detects a disconnected\n client. Since the client is already gone at that point attempting to\n send the error message to the client might not work and might ultimately\n result in another exception in the server. Mainly this is here so that\n it is silenced by default as far as Werkzeug is concerned.\n\n Since disconnections cannot be reliably detected and are unspecified\n by WSGI to a large extend this might or might not be raised if a client\n is gone.\n\n .. versionadded:: 0.8\n '), ('__format__', <built-in method __format__ of ClientDisconnected object at 0x1065ca230>), ('__getattribute__', <method-wrapper '__getattribute__' of ClientDisconnected object at 0x1065ca230>), ('__getitem__', <method-wrapper '__getitem__' of ClientDisconnected object at 0x1065ca230>), ('__getslice__', <method-wrapper '__getslice__' of ClientDisconnected object at 0x1065ca230>), ('__hash__', <method-wrapper '__hash__' of ClientDisconnected object at 0x1065ca230>), ('__init__', <bound method ClientDisconnected.__init__ of <ClientDisconnected '400: Bad Request'>>), ('__module__', 'werkzeug.exceptions'), ('__new__', <built-in method __new__ of type object at 0x105bd4570>), ('__reduce__', <built-in method __reduce__ of ClientDisconnected object at 0x1065ca230>), ('__reduce_ex__', <built-in method
__reduce_ex__ of ClientDisconnected object at 0x1065ca230>), ('__repr__', <bound method ClientDisconnected.__repr__ of <ClientDisconnected '400: Bad Request'>>), ('__setattr__', <method-wrapper '__setattr__' of ClientDisconnected object at 0x1065ca230>), ('__setstate__', <built-in method __setstate__ of ClientDisconnected object at 0x1065ca230>), ('__sizeof__', <built-in method __sizeof__ of ClientDisconnected object at 0x1065ca230>), ('__str__', <bound method ClientDisconnected.__str__ of <ClientDisconnected '400: Bad Request'>>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x105da42c0>), ('__unicode__', <bound method ClientDisconnected.__unicode__ of <ClientDisconnected '400: Bad Request'>>), ('__weakref__', None), ('args', ('400 Bad Request',)), ('code', 400), ('data', {'message': 'This field is required'}), ('description', '<p>The browser (or proxy) sent a request that this server could not understand.</p>'), ('get_body', <bound method ClientDisconnected.get_body of <ClientDisconnected '400: Bad Request'>>), ('get_description', <bound method ClientDisconnected.get_description of <ClientDisconnected '400: Bad Request'>>), ('get_headers', <bound method ClientDisconnected.get_headers of <ClientDisconnected '400: Bad Request'>>), ('get_response', <bound method ClientDisconnected.get_response of <ClientDisconnected '400: Bad Request'>>), ('message', '400 Bad Request'), ('name', 'Bad Request'), ('wrap', <bound method type.wrap of <class 'werkzeug.exceptions.ClientDisconnected'>>)]

但是“ok”被发送到客户端。所以客户端正在断开连接。

我想使用它向我的 api 客户端发回有意义的错误消息,但调用堆栈中似乎发生了另一个错误。有什么想法吗?

最佳答案

似乎 Werkzeug 几个月前用 https://github.com/mitsuhiko/werkzeug/commit/2723a117e34207f33ff075a9ea6d1f28a33131d3 改变了他们的异常逻辑.

因此 flask-restful 有点过时了。我遇到了同样的问题,为了适应新代码我做了一个快速破解,看看 https://github.com/vojnovski/flask-restful/commit/8bfd1a8427b15df95a6549afdf4ddb4a49d8f29b 中的变化。 .

请记住,他也打破了 flask-restful 的测试,如果你不想测试失败,你也需要修补它们。

关于python - flask.ext.restful -> reqparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14007228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com