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.