Кодировка во Flask и значение None

Всем привет. Простой вопрос, но не могу найти нигде ответ.

Написал функцию в отдельном модуле validation, которая обрабатывает входящий запрос и формирует словарь примерно такого вида:

{'error': False, 'data': 'Андрей, Жанна и ещё 2 человека лайкнули это', 'error_message': None}

Задача вывести при определенном запросе во flask такой результат:

{ "error": False, "data": "Андрей, Жанна и ещё 2 человека лайкнули это", "error_message": None }

Для Flask:

from flask import Flask, request
import validation

app = Flask(__name__)


@app.route('/likes')
def get_likes():
    total = request.args.get('names')

    return validation.validation_names(total)


if __name__ == '__main__':
    app.run()

Возникло несколько проблем, которые не могу решить:

  1. При выводе искажет русский язык, хотя в Pycharm работает идеально. получается типа:`\u0410\u043d\u0434\u0440\u0435\u0439, \u0416\u0430\u043d\u043d\u0430 \
  2. При выводе значение словаря None преобразуется в null, можно конечно взять сделать строкой, но возможно как то иначе?
  3. Можно ли как то вывести словарь не в одну строку а в несколько?`

Ответы (1 шт):

Автор решения: nomnoms12

Если вы возвращаете dict, то Flask по умолчанию преобразует ответ в JSON:

If you return a dict from a view, it will be converted to a JSON response.

  1. Cпецификация JSON допускает экранирование символов юникода. В вашем примере русский язык никак не искажён, только закодирован:

    // Андрей, Жанна
    \u0410\u043d\u0434\u0440\u0435\u0439, \u0416\u0430\u043d\u043d\u0430
    
  2. Объекта None в спецификации JSON нет. На этапе преобразования он заменяется аналогичным по смыслу null

  3. Вы можете вручную преобразовать ответ в JSON, используя функцию flask.json.dumps, которая принимает аргумент indent:

    return json.dumps(validation.validation_names(total), indent=4)
    

Если вы не хотите возвращать JSON, то можете преобразовать словарь в строку:

return str(validation.validation_names(total))
→ Ссылка