Не удалось получить комментарий от API фляги - PullRequest
1 голос
/ 19 октября 2019

При попытке получить текст добавленных комментариев я получаю ошибку ключа в flask.request.form с помощью следующей команды curl. Я пытаюсь распечатать flask.request.form, но он был пуст. Как это исправить?

команда curl для добавления нового комментария:

curl -ib cookies.txt   
--header 'Content-Type: application/json'   
--request POST   
--data '{"text":"Comment sent from curl"}'  
http://localhost:8000/api/v1/p/3/comments/

ОШИБКА:

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'text'

Мой комментарий obj:

  <form id="comment-form">
  <input type="text" value=""/>
  </form>

Мой Python-файл flask.api, который возвращает новый словарь комментариев:

@app.route('/api/v1/p/<int:postid>/comments/', methods=["POST"])
def add_comment(postid):
     db = model.get_db()
    owner = flask.session["username"]
    query = "INSERT INTO comments(commentid, owner, postid, text, created) VALUES(NULL, ?, ?, ?, DATETIME('now'))"
    db.execute(query, (owner, postid, flask.request.form["text"]))
    last_id = db.execute("SELECT last_insert_rowid()").fetchone()["last_insert_rowid()"]
    get_newest_comment_query = "SELECT * FROM comments WHERE commentid = ?"

    comment = db.execute(get_newest_comment_query, (last_id,)).fetchone()
    print('get comment: ', comment)
    return flask.jsonify(comment), 201

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Добавление к ответу @ Harshal. При использовании curl кажется, что вы неправильно обращаетесь к данным запроса. Поскольку Content-Type для запроса установлен как application/json, вам необходимо получить доступ к данным запроса, используя flask.request.json - подробнее

Или вы можете обновить команду curlкак показано ниже,

curl -ib cookies.txt   
  --request POST   
  --data-urlencode "text=Comment sent from curl"  
  http://localhost:8000/api/v1/p/3/comments/

, в этом случае curl автоматически использует Content-Type application/x-www-form-urlencoded, и ваше приложение сможет читать данные запроса, используя flask.request.form

0 голосов
/ 19 октября 2019

Ваша HTML-форма настроена неправильно.

  1. Вы отправляете запрос GET, и ваша колба принимает только POST.
  2. flask.request.form["text"] запрашивает ввод именованного текста, но у вашего текстового поля нет имени.
  3. Нет кнопки отправки.

Вы можете исправитьэто таким образом:

<form id="comment-form" method="post">
    <input type="text" value="" name="text" />
    <input type="submit" />
</form>

Возможно, вам было бы легче отлаживать, если бы вы знали больше о кодах ответов: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status.

Поскольку вы используете request.form, турcurl можно упростить так:

curl --form "text=some_text_here" http://localhost:8000/api/v1/p/3/comments/

Надеюсь, это поможет. Удачи.

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