При отправлении запроса в Insomnia я получаю такой вывод:
{
"id": 264,
"name": "ifconfig",
"output": "\nНастройка протокола IP для Windows\n\n\nАдаптер Ethernet Ethernet 4:\n\n Состояние среды. . . . . . . . : Среда передачи недоступна.\n DNS-суффикс подключения . . . . . : \n\nАдаптер Ethernet Hamachi:\n\n DNS-суффикс подключения . . . . . : \n IPv6-адрес. . . . . . . . . . . . : censered\n Локальный IPv6-адрес канала . . . : censered\n IPv4-адрес. . . . . . . . . . . . : censered\n Маска подсети . . . . . . . . . . : censered\n Основной шлюз. . . . . . . . . : censered\n\nАдаптер Ethernet Ethernet 3:\n\n DNS-суффикс подключения . . . . . : \n Локальный IPv6-адрес канала . . . : censered\n IPv4-адрес. . . . . . . . . . . . : censered\n Маска подсети . . . . . . . . . . : 255.255.255.0\n Основной шлюз. . . . . . . . . : censered\n\nТуннельный адаптер Teredo Tunneling Pseudo-Interface:\n\n DNS-суффикс подключения . . . . . : \n IPv6-адрес. . . . . . . . . . . . : censered\n Локальный IPv6-адрес канала . . . : censered\n Основной шлюз. . . . . . . . . : "
}
Почему-то не переносится строка, что уже только не пробовал
Вот код views:
class IfconfigViewSet(viewsets.ModelViewSet):
queryset = Ifconfig.objects.all() # Содержание всех записей в модели Ifconfig
serializer_class = IfconfigSerializer # Указание сериализатора
# Определяет метод create, который вызывается,
# когда пользователь отправляет POST-запрос к API-конечной точке,
# управляемой этим ViewSet.
def create(self, request, *args, **kwargs):
# Получение команды из запроса
command = request.data.get('command')
# Определение операционной системы, чтобы выполнить Linux-команду
system = platform.system()
# Выполнение команды
if command == 'ifconfig':
if system == 'Windows':
process = subprocess.Popen(['ipconfig'], stdout=subprocess.PIPE)
else:
process = subprocess.Popen(['ifconfig'], stdout=subprocess.PIPE)
# Ждет завершения подпроцесса и возвращает его стандартный вывод в переменную output.
output, _ = process.communicate()
# Декодирует вывод подпроцесса в строку Юникод.
output = output.decode('cp866')
#output = codecs.decode(output, 'raw_unicode_escape')
#output = output.decode('latin-1', errors='ignore')
#output = output.encode('utf-8', errors='ignore')
output = output.replace('\r\n', '\n')
output = '\n'.join(output.splitlines())
#output_json = json.dumps(output, indent=4, ensure_ascii=False)
# Сохранение результата в базе данных
ifconfig_instance = Ifconfig.objects.create(name=command, output=output)
# Сериализация и возврат результата
serializer = IfconfigSerializer(ifconfig_instance)
# Возвращает HTTP-ответ со статусом HTTP_201_CREATED (Создано)
# и сериализованными данными объекта ifconfig_instance.
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
# Если команда не равна ifconfig, возвращается HTTP-ответ со статусом HTTP_400_BAD_REQUEST (Неверный запрос)
# и сообщением об ошибке.
return Response({'error': 'Неверная команда'}, status=status.HTTP_400_BAD_REQUEST)
Код serializators:
class IfconfigSerializer(serializers.ModelSerializer):
class Meta:
model = Ifconfig # Указать модель, с которой работает данный сериализатор
fields = '__all__' # По умолчанию включать все поля из модели Ifconfig
Код models:
class Ifconfig(models.Model):
name = models.CharField(max_length=255) # Название команды
output = models.TextField() # Поле для результата выполнения команды
Подскажите пожалуйста как решить, уже долго мучаюсь