Выходные данные json во флаконах выглядят по-разному при использовании Apache / uWSGI или Werkzeug - PullRequest
0 голосов
/ 30 октября 2018

Вывод Json выглядит иначе, когда будут использоваться Apache / uWSGI и Werkzeug. Где трюк?

см. Пример:

Werkzeug:

curl -k -iL http://127.0.0.1:5000/test/
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 32
Content-Type: application/json
Server: Werkzeug/0.14.1 Python/3.6.6
Date: Tue, 30 Oct 2018 18:13:37 GMT

{
  "data": "Hello, Api!"
}

Тот же код от Apache / uWSGI:

curl -k  -iL https://flask.xxxxx.local/test/
HTTP/1.1 200 OK
Date: Tue, 30 Oct 2018 18:13:39 GMT
Server: Apache
Content-Type: application/json
Content-Length: 27

{"data":"Hello, Api!"}

Я жду:

{
  "data": "Hello, Api!"
}

Код:

from flask import Flask, jsonify, abort, make_response, render_template, g
from flask_restful import Api, Resource, reqparse, fields, marshal
...
@app.route('/test/')
def get_resource():
   headers = {'Content-Type': 'application/json'}
   content = { 'data': 'Hello, Api'}
   return make_response(jsonify(content),200,headers)
...

Flask==1.0.2
Flask-RESTful==0.3.6
uWSGI==2.0.17.1
Werkzeug==0.14.1

ТНХ

1 Ответ

0 голосов
/ 31 октября 2018

Причиной различия является настройка конфигурации Flask JSONIFY_PRETTYPRINT_REGULAR

Этот параметр имеет значение по умолчанию False, но всегда будет True при работе в режиме отладки.

Таким образом, когда вы работаете в uWsgi / Apache, используется значение по умолчанию False, без отступов и новых строк. Когда вы работаете под тестовым сервером Werkzeug в режиме отладки, Flask устанавливает значение True.

Чтобы получить отступы и переводы строк в uwsgi, выполните в скрипте wsgi следующее:

app = Flask(...)
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True

См. Документацию: http://flask.pocoo.org/docs/1.0/config/#JSONIFY_PRETTYPRINT_REGULAR

Кроме того, вам не нужен вызов make_response(). Вы можете просто сделать:

@app.route('/test/')
def get_resource():
   content = { 'data': 'Hello, Api'}
   return jsonify(content)

... и Flask установит правильный тип содержимого.

...