Колба успокоительная - не видно вывод из json post - PullRequest
0 голосов
/ 29 марта 2019

Я использую флешку для создания сервера API, который получает данные JSON. Я использовал следующий этот учебник для создания кода: из колбы импортная колба из колбы запрос на импорт

app = Flask(__name__)

@app.route('/postjson', methods = ['POST'])
def postJsonHandler():
    print (request.is_json)
    content = request.get_json()
    print (content)
    return 'JSON posted'

app.run(host='0.0.0.0')

Когда я бегу:

curl -X POST http://127.0.0.1:5000/postjson -H "Content-type: application/json" -d '{ "data": { "url": "https://google.com" }}'

Я просто вижу "JSON posted" без какого-либо отпечатка. Почему я не вижу никаких данных? Я также пытался использовать POSTMAN, но тот же результат.

Я также попробовал json на примере руководства:

{ 
 "device":"TemperatureSensor", 
 "value":"20", 
 "timestamp":"25/01/2017 10:10:05" 
}

тоже самое.

РЕДАКТИРОВАТЬ - как ответ @TomMP, когда я попробовал следующий код:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/producer', methods = ['POST'])
def postJsonHandler():
    print (request.is_json)
    content = request.get_json()
    print (content)
    return request.get_json()
    #return 'JSON posted'

app.run(host='0.0.0.0')

Я получаю:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>

И когда я пробую режим отладки, я получаю:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>TypeError: 'dict' object is not callable
The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a dict. // Werkzeug Debugger</title>
    <link rel="stylesheet" href="?__debugger__=yes&amp;cmd=resource&amp;f=style.css"
        type="text/css">
... (more lines of data)

Ответы [ 3 ]

1 голос
/ 29 марта 2019

это потому, что вы только возвращаете текст 'JSON posts'
, поэтому возвращайте то, что вы хотите получить
как ответ json:

return jsonify({'status': 0, 'msg': 'success'})

detail

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/postjson', methods = ['POST'])
def postJsonHandler():
    content = request.json
    print(content)
    return jsonify(content)

app.run(host='0.0.0.0')

callпример:

requests.post('http://0.0.0.0:5000/postjson', json={'a':'b'}).json()
0 голосов
/ 29 марта 2019

Когда вы используете curl для доступа к маршруту, он покажет вам только то, что вернул этот маршрут - в данном случае это JSON posted.Он не покажет вам промежуточные операторы печати.Вы можете попробовать и запустить колбу в режиме отладки .Это должно распечатать на консоль, с которой вы запускаете это приложение.

Редактировать: Для ясности, вы все равно не будете получать данные, отправленные вами в ответ на ваш запрос, то есть в Почтальон.Для этого вам придется вернуть данные в конце вашей функции, используя return request.get_json()

0 голосов
/ 29 марта 2019

Когда вы используете print(), он просто печатает все на консоль, поэтому проверьте, запущено ли приложение, чтобы увидеть распечатанный вывод.То, что вы возвращаете ('JSON posts') из своего представления, - это то, что возвращается клиенту в ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...