【问题标题】:How to deny a http request (throw some code error)如何拒绝 http 请求(抛出一些代码错误)
【发布时间】:2020-01-29 18:13:31
【问题描述】:

这是我的代码,我需要将“BLOCKED”返回更改为合法请求拒绝,我该怎么做?

@app.route('/api/echo-json', methods=['GET', 'POST', 'DELETE', 'PUT'])
def add():

    data = request.get_json()
    dt_string = datetime.now()
    objeto = Requisicao(data,dt_string)

    if len(lista)<2:
        lista.append(objeto.id)
        lista.append(objeto.hora)
        return 'PASS'

    for i in range(0,len(lista),2):
        if lista[i] == objeto.id and objeto.hora < lista[i+1] + timedelta(seconds=10):
            return 'BLOCKED'

    else:
        lista.append(objeto.id)
        lista.append(objeto.hora)
        return 'PASS'

【问题讨论】:

  • 您的意思是 HTTP 错误代码吗?哪一个?
  • 是的,403 禁止

标签: python api flask request


【解决方案1】:

您想返回错误而不是通常的成功?像这样的东西可以工作:

return jsonify(success=False, errors=errors), 500

或者,您可以在 Python 中引发错误?我会看这里

https://docs.python.org/3/tutorial/errors.html

【讨论】:

  • 对,您的错误将是实际错误。例如,在此之前,您可以添加 errors = ‘blocked’
【解决方案2】:

您可以只返回一个元组,其中第一项是消息,第二项是 HTTP 错误代码。

我不确定您的代码要返回什么样的响应,但 400(错误请求)可能适合 API。以下是完整列表:https://www.wikiwand.com/en/List_of_HTTP_status_codes

@app.route('/bad_request'):
    return jsonify({}), 400

【讨论】:

    【解决方案3】:

    您可能希望返回 400 之类的 HTTP 错误。请参阅其他答案以获取 HTTP 错误代码的链接。该答案的变体,更接近您的代码:

    @app.route('/api/echo-json', methods=['GET', 'POST', 'DELETE', 'PUT'])
    def add():
        ...
        if ...:
            ...
            return 'PASS'
    
        for ...:
            if ...:
                return 'BLOCKED', 403
    
        ...
    

    【讨论】:

    • 但拒绝请求?还是只返回 400?
    • 只需将 400 替换为您需要的错误代码(相应编辑)
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2019-06-15
    • 2020-05-28
    • 2016-03-20
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多