1

Тема: інтимне спілкування з Django

Хотів було описати в яскравих деталях, як я відважно боровся з log verbosity налаштуваннями Django аби нарешті відобразилися деталі помилки API сервера 500 Internal Server Error. Вбив на це добрих чотири години без жодного результату.

Врешті з'ясувалося, що проблема не була пов'язана саме з Django, натомість код ексепшна в самому Python коді був вкрай куций і я його розширив:

#        except:
#            response = 'Failed'
#            status = 500
        except Exception as e:
            response = 'Failed with exception: %s' % str(e)
            status = 500

Ну і далі вже в клієнтському коді відображаю в консолі всі можливі деталі:

response = requests.post(full_url, json=data)
print('HTTP status code:', response.status_code)
print('HTTP headers:', response.headers)
print('Response content:', response.text)

2

Re: інтимне спілкування з Django

Є таблиця:

CREATE TABLE `products` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `product_type_id` int DEFAULT NULL,
  `description` text,
  `active` tinyint(1) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `number` int DEFAULT NULL,
  `serial` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Надсилаю запит POST:

data = {
  "name": "Product Name3e",
  "product_type_id": "1235678901",
  "active": True,
  "number": "111",
  "description": "Product description3e",
  "serial": "789123456",
  "created": "2023-10-30 01:01:01"
}

В такому вигляді працює ок, однак я не хочу надсилати дані із значенням `created`, бо воно повинно заповнюватися само завдяки дефінішну колонки DEFAULT CURRENT_TIMESTAMP.

Фактично ж без передавання значення "created" виглядає ось так:

Response content: {"method": "POST", "message": "Failed with exception: (mysql.connector.errors.IntegrityError) 1048 (23000): Column 'created' cannot be null\n[SQL: INSERT INTO products (name, product_type_id, description, active, created, number, serial) VALUES (%(name)s, %(product_type_id)s, %(description)s, %(active)s, %(created)s, %(number)s, %(serial)s)]\n[parameters: {'name': 'Product Name3f', 'product_type_id': '1235678902', 'description': 'Product description3f', 'active': True, 'created': None, 'number': '112', 'serial': '789123457'}]\n(Background on this error at: http://sqlalche.me/e/gkpj)", "body": {"name": "Product Name3f", "product_type_id": "1235678902", "active": true, "number": "112", "description": "Product description3f", "serial": "789123457"}, "status": 500}

Поки що не розумію, як його в Django взагалі не інсертити, щоб на рівні бази заповнювалося само.

3

Re: інтимне спілкування з Django

А для тих, хто взагалі не в Django, можете уточнити, якими саме функціями ви відправляєте запит до SQL? Бо POST - це те, що прибігає до веб-сервера, а воно ж там ще якось усередині перетворюється. Наприклад, там може усередині бути dataclass для цих полів.

4

Re: інтимне спілкування з Django

koala написав:

А для тих, хто взагалі не в Django, можете уточнити, якими саме функціями ви відправляєте запит до SQL? Бо POST - це те, що прибігає до веб-сервера, а воно ж там ще якось усередині перетворюється. Наприклад, там може усередині бути dataclass для цих полів.

На жаль, я поки що з нуля створив декілька аплікацій лише на Flask, а з Django в мене поки що на рівні "склонував з репозиторію готове і пробую щось виправити" з деякими мінімальними успіхами.
У Flask це все працює через db model і sqlalchemy, а тут в Django ще не розібрався.