Retornar o código de status HTTP 201 no balão


141

Estamos usando o Flask para uma de nossas APIs e eu queria saber se alguém sabia como retornar uma resposta HTTP 201?

Para erros como 404, podemos chamar:

from flask import abort
abort(404)

Mas para 201 eu recebo

LookupError: nenhuma exceção para 201

Preciso criar minha própria exceção como essa nos documentos?


18
return '', 201
Luc

Respostas:


158

Você pode ler sobre isso aqui.

return render_template('page.html'), 201

11
Isso requer page.html... Não funcionará por si só.
Chris Stryczynski

Para mim, esse tipo de tratamento de erro funcionou (atrás do IIS) apenas se InvalidUsage era filho de werkzeug.exceptions.HTTPException, não uma exceção geral
Gyula Sámuel Karli

118

Você pode usar o Response para retornar qualquer código de status http.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')

2
Essa deve ser a resposta aceita, este é o caminho a ser seguido.
LoopsGod 23/02

Esta é realmente a solução perfeita
Shahriar Rahman Zahin

ótimo, nunca pense antes
Arian Saputra 25/04

26

Como carece de sugestões, envie o código de status na declaração de retorno e se você o estiver armazenando em alguma variável como

notfound = 404
invalid = 403
ok = 200

e usando

return xyz, notfound

do que o tempo, verifique se o seu tipo não é str. Como enfrentei esse pequeno problema, também aqui está uma lista de códigos de status seguidos globalmente http://www.w3.org/Protocols/HTTP/HTRESP.html

Espero que ajude.


17

Você pode fazer

result = {'a': 'b'}
return jsonify(result), 201

se você deseja retornar dados JSON na resposta junto com o código de erro Você pode ler sobre respostas aqui e aqui para obter detalhes da API make_response


5

No código do seu balão, você deve especificar idealmente o tipo MIME o mais rápido possível:

return html_page_str, 200, {'ContentType':'text/html'}

return json.dumps({'success':True}), 200, {'ContentType':'application/json'}

... etc


1

você também pode usar flask_api para enviar resposta

from flask_api import status

@app.route('/your-api/')
def empty_view(self):
    content = {'your content here'}
    return content, status.HTTP_201_CREATED

você pode encontrar referência aqui http://www.flaskapi.org/api-guide/status-codes/


1

Dependendo de como a API é criada, normalmente com um 201 (criado) você retornaria o recurso que foi criado. Por exemplo, se estivesse criando uma conta de usuário, você faria algo como:

return {"data": {"username": "test","id":"fdsf345"}}, 201

Observe que o número pós-fixado é o código de status retornado.

Como alternativa, você pode enviar uma mensagem para o cliente, como:

return {"msg": "Created Successfully"}, 201

0

No meu caso, eu tive que combinar o que foi dito acima para fazer funcionar

return Response(json.dumps({'Error': 'Error in payload'}), 
status=422, 
mimetype="application/json")

0

Portanto, se você estiver usando o flask_restfulPackage for API retornando 201, será como

def bla(*args, **kwargs):
    ...
    return data, 201

onde datadeve haver qualquer valor hashable / JsonSerialiable, como dict, string.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.