簡體   English   中英

如何使用flask-restful中止未知參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM