[英]How to abort on unknown argument using flask-restful?
這個問題不再相關,因為燒瓶穩定的新發行版可以自行解決。
我有一個燒瓶式的API,我使用reqparse來解析參數。 現在,如果用戶使用未知參數,我想中止請求。
使用reqparse,我可以在檢測到已知值不正確的參數時中止操作,但是似乎沒有默認情況下可以處理其他參數。
這樣可以防止用戶通過“為什么不起作用?”與我聯系。 當他們是不使用正確參數的人。
你會怎么做?
編輯:根據要求,這是視圖的示例:
class myView(restful.Resource):
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('arg1', type=str, action='append')
parser.add_argument('arg2', type=myType, action='append')
args = parser.parse_args()
result = dao.getResult(arg1, arg2)
return jsonify(result)
api.add_resource(myView, '/view')
我想要的是:如果用戶去ip/view?bad_arg=bad
那么他們會收到400錯誤。
從0.3.1開始,您可以將strict=True
傳遞給reqparse.parse_args
。 https://github.com/flask-restful/flask-restful/pull/358
reqparse沒有提供內置的解決方案,但是我可以通過對reqparse解析器進行子類化來解決我的問題。
class StrictParser(reqparse.RequestParser):
def parse_args(self, req=None):
"""Overide reqparse parser in order to fail on unknown argument
"""
if req is None:
req = request
known_args = [arg.name for arg in self.args]
for arg in request.args:
if arg not in known_args:
bad_arg = reqparse.Argument(arg)
bad_arg.handle_validation_error("Unknown argument: %s" % arg)
return reqparse.RequestParser.parse_args(self,req)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.