Как на сервере 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'] 
→ Ссылка