Отправка запроса POST в RESTFUL API (Flask), но получение TypeError

Итак, я пытаюсь отправить определенные значения в свой Flask API из моего приложения Streamlit, но я не уверен, почему я получаю ошибку типа (используя это как ссылку: Отправка запроса POST в мой RESTful API (Python-Flask), но получение GET запрос).

Ошибка типа: функция просмотра для get_data не вернула допустимый ответ. Функция либо вернула None, либо завершилась без оператора return.

app.py

import requests
import streamlit as st
...
api_url = requests.get("http://127.0.0.1:5000/") # Flask url
create_row_data = {'name': name, 'type': get_type(name), 'token_value': token_value, 'external': external, 'start': start, 'end': end, 'step': step}
print(create_row_data)
r = requests.post(url=api_url, json = create_row_data)

url в main.py имеет https

main.py

@app.route('/', methods=['GET', 'POST'])
def get_data():
   if request.method =='POST':
    p_name = request.json['name']
    p_type = request.json['type']
    ...
    p_end = request.json['end']
    p_step = request.json['step']
    create_row_data = {'p_name': str(p_name), 'p_type': str(p_type), ... , 'p_end': str(p_end), 'p_step': str(p_step)}
    print(create_row_data)
    response = requests.post(url, data=json.dumps(create_row_data), headers= {'Content-type': 'application/json'}
    return response.content

Что я хочу сделать, так это отправить значения в мой Flask API, который затем будет использовать эти значения, вернуть фрейм данных и отправить фрейм данных в приложение Streamlit.

Любая помощь приветствуется.


person SL42    schedule 07.07.2021    source источник
comment
Откуда create_row_data?   -  person Klaus D.    schedule 07.07.2021
comment
@KlausD., Я допустил опечатку в app.py. Теперь row_data должно быть create_row_data.   -  person SL42    schedule 08.07.2021


Ответы (1)


Ваш маршрут ничего не возвращает для запроса GET (return response.content обрабатывается в POST).

например если вы добавите return 'ok', 200 под свой POST обработчик, он обработает GET запрос

person djnz    schedule 07.07.2021
comment
Привет, @djnz, есть ли способ увидеть свой print(create_row_data) или response.content, когда request.method== 'POST' ? - person SL42; 08.07.2021
comment
когда это POST запрос, вы должны это увидеть. Это не доходит до этого момента, поскольку вы вызываете GET перед POST в app.py: api_url = requests.get("http://127.0.0.1:5000/") # Flask url - person djnz; 08.07.2021
comment
Я избавился от requests.get для моего api_url, и я все еще получаю ok, как и предполагалось, от того, что находится внутри create_row_data? - person SL42; 08.07.2021