Estou tentando criar uma API simples usando o Flask, na qual agora quero ler algum JSON POSTADO. Eu faço o POST com a extensão Postman Chrome, e o JSON I POST é simples {"text":"lalala"}
. Eu tento ler o JSON usando o seguinte método:
@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
content = request.json
print content
return uuid
No navegador, ele retorna corretamente o UUID que eu coloquei no GET, mas no console, ele apenas imprime None
(onde eu espero que ele imprima o {"text":"lalala"}
. Alguém sabe como eu posso obter o JSON postado no método Flask?
Para referência, aqui está o código completo de como enviar json a partir de um cliente Python:
A entrada "json =" definirá automaticamente o tipo de conteúdo, conforme discutido aqui: Poste JSON usando solicitações de Python
E o cliente acima funcionará com este código do lado do servidor:
fonte
Esta é a maneira que eu faria e deveria ser
Com
silent=True
set, aget_json
função falhará silenciosamente ao tentar recuperar o corpo do json. Por padrão, isso está definido comoFalse
. Se você está sempre esperando um corpo de json (não opcionalmente), deixe-o comosilent=False
.A configuração
force=True
ignorará arequest.headers.get('Content-Type') == 'application/json'
verificação que o balão faz por você. Por padrão, isso também é definido comoFalse
.Consulte a documentação do balão .
Eu recomendo sair
force=False
e fazer o cliente enviar oContent-Type
cabeçalho para torná-lo mais explícito.Espero que isto ajude!
fonte
silent=True
. Sim, isso é possível, e eu uso. É realmente baseado em como você projeta sua API para ser consumida. Se não houver um caso como esse para o terminal, removasilent=True
ou defina explicitamente comoFalse
.print(content)
aftercontent = request.get_json()
imprime o objeto ... mas como um objeto Python válido (e não como um objeto JSON válido). Por exemplo, ele usa aspas simples, enquanto o JSON exige estritamente aspas duplas para os valores de chave (cadeias) como valores de cadeia. Se você deseja a representação JSON, usejson.dumps()
com o objetoSupondo que você tenha publicado JSON válido com o
application/json
tipo de conteúdo,request.json
os dados JSON serão analisados.fonte
response = request.post('http://127.0.0.1:5000/hello', json={"foo": "bar"})
. Seguindo essa execuçãoresponse.json()
deve retornar{'foo': 'bar'}
{'foo': 'bar'}
JSON não é válido. Pode ser uma representação de objeto Python válida que se parece muito com JSON, mas JSON válido usa estritamente aspas duplas.get_json()
método request decodifica de objetos JSON para Python, sim. Onde você espera que ele produza um documento JSON válido?.json()
ou.get_json()
retorne uma representação de objeto JSON válida, não um ditado de Python. Estou apenas olhando o nome e inferir o que pode resultar disso.Para todos aqueles cujo problema ocorreu na chamada ajax, aqui está um exemplo completo:
Chamada Ajax: a chave aqui é usar um
dict
e depoisJSON.stringify
E no lado do servidor:
fonte
Para dar outra abordagem.
fonte
Supondo que você tenha postado JSON válido,
fonte
Tente usar o parâmetro force ...
request.get_json(force = True)
fonte