Как на сервере FLASK прочитать отправленный с GET'ом JSON?
Здравствйуте! На клиенте следующий код, для отправки
function test(){
$.ajax({
url:'/article',
method:'GET',
dataType:'json',
data:JSON.stringify({'article':13}),
contentType : "application/json",
success: function(response){
console.log("Success")
},
error: function(e) {
console.log("Erroe")
}
})}
На сервере:
@app.route('/article')
def func():
request.get_json()
Как получить значение
Ответы (1 шт):
Автор решения: Sergei Kirjanov
→ Ссылка
request.get_json берет json из запросов, у которых есть тело.
У GET тела не бывает.
Соответственно можно посмотреть в браузере/инструментах-разработчика/сеть как посылается data:
Request URL:http://127.0.0.7/article?{%22article%22:%22%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F%20%D0%B5%D1%80%D1%83%D0%BD%D0%B4%D0%B0%22}
Потом посмотреть в документации flask API, что часть после ? попадает в request.query_string
Но она закодирована как URL. parse_qsl декодирует пару (имитируемую "="+). Берем value с пары и парсим json.
from urllib.parse import parse_qsl
from json import loads
def json_from_query_string(s):
return loads(parse_qsl("="+s.decode())[0][1])
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET'])
def hello_world():
return 'Hello, World!'
@app.route('/article', methods=['GET'])
def article():
parsed = json_from_query_string(request.query_string)
return parsed['article']