Кодировка во 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()
Возникло несколько проблем, которые не могу решить:
- При выводе искажет русский язык, хотя в Pycharm работает идеально. получается типа:`\u0410\u043d\u0434\u0440\u0435\u0439, \u0416\u0430\u043d\u043d\u0430 \
- При выводе значение словаря None преобразуется в null, можно конечно взять сделать строкой, но возможно как то иначе?
- Можно ли как то вывести словарь не в одну строку а в несколько?`
Ответы (1 шт):
Если вы возвращаете dict, то Flask по умолчанию преобразует ответ в JSON:
If you return a dict from a view, it will be converted to a JSON response.
Cпецификация JSON допускает экранирование символов юникода. В вашем примере русский язык никак не искажён, только закодирован:
// Андрей, Жанна \u0410\u043d\u0434\u0440\u0435\u0439, \u0416\u0430\u043d\u043d\u0430Объекта
Noneв спецификации JSON нет. На этапе преобразования он заменяется аналогичным по смыслуnullВы можете вручную преобразовать ответ в JSON, используя функцию
flask.json.dumps, которая принимает аргументindent:return json.dumps(validation.validation_names(total), indent=4)
Если вы не хотите возвращать JSON, то можете преобразовать словарь в строку:
return str(validation.validation_names(total))