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?

ingh.am
fonte
18
return '', 201
Luc

Respostas:

158

Você pode ler sobre isso aqui.

return render_template('page.html'), 201
Iacks
fonte
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')
Yasir
fonte
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.

Harsh Daftary
fonte
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

Kishan K
fonte
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

Ben Wheeler
fonte
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/

Vivek
fonte
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
Croc
fonte
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")
Cheetara
fonte
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.

Deepak Sharma
fonte