Как записать cookies в БД, чтобы потом их можно было использовать?
Мое приложение на джанге при запуске логинится в сервисе, но мне бы хотелось логинится намного реже. В ответе при логине я могу получить некие settings вместе с куками и выполнять запросы уже без повторного логина. Проблема в следующем, этот самый settings не получается записать в БД так, чтобы потом его можно было использовать. Пробовал json, pickle, ast - ничего не помогает. Уверен есть простое решение, но найти не могу.
Получаю вот такой ответ при логине (тот самый settings):
{'uuid': '684e482c-71d0-11eb-444-8c85909e71ef', 'device_id': 'android-684444c71d011eb', 'ad_id': 'edcc444-046b-5d45-3dcb-381fc284e0af', 'session_id': '684e444-71d0-444-b6c3-8c85909e71ef', 'cookie': b'\x80\x04\x95\xdf\x01\x00\x00\x00\x00\x00\x00}\x94\x8c\x0e.instagram.com\x94}\x94\x8c\x01/\x94}\x94(\x8c\tcsrftoken\8c\x06Cookie\x94\x93\x94)\x81\x94}\x94(\x8c\x07version\x94K\x00\x8c\x04name\x94\x8c\tcsrftoken\x94\x8c\x05value\x94\x8c\x10domain_specified\x94\x88\x8c\x12domain_initial_dot\x94\x88\x8c\x04path\x94h\x03\x8c\x0epath_specified\x94\x88\x8c\x06secure\x94\x88\x8c\x07expires\x94JE\x1d\x0eb\x8c\x07discard\x94\x89\x8c\x07comment\x94N\x8c\x0bcomment_url\x94N\x8c\x07rfc2109\x94\x89\x8c\x05_rest\x94}\x94ub\x8c\x03mid\x94h\x08)\x81\x94}\x94(h\x0bK\x00h\x0ch h\x0e\x8c\x1cYC47NAABAAEFnbHpiMh\x10Nh\x11\x89h\x12\x8c\x0e.instagram.com\x94h\x14\x88h\x15\x88h\x16h\x03h\x17\x88h\x18\x88h\x19J4\xa2\xf0ch\x1a\x89h\x1bNh\x1cNh\x1d\x89h\x1e}\x94ubuss.', 'created_ts': 1613642759}
Ответы (1 шт):
Вопрос решен.
Оказалось есть специальный тип в поля в Django ORM, для байтов (models.BinaryField). Разбил эти данные на 2 части, 1 - куки, в том виде, в котором они предоставляются (BinaryField), 2 - все данные, где ключ 'cookie' заменил на обычный текст.
# wrie settings TO DB
settings = get_settings()
cookie = settings['cookie']
settings['cookie'] = 'empty'
body = settings
Settings.objects.update_or_create(id=1, defaults={'body': body, 'cookie': cookie})
# get settings FROM DB
import ast
settings = Settings.objects.get(id=1).body
settings = ast.literal_eval(settings)
settings['cookie'] = bytes(Settings.objects.get(id=1).cookie)