сохранение куки в базе данных (чтобы сделать запрос от имени пользователя) - PullRequest
2 голосов
/ 03 мая 2011

Я создаю веб-приложение на Facebook, которое позволяет пользователям предоставлять данные для входа на сторонний веб-сайт и отправлять запросы через мое приложение к этой службе.(т. е. у них есть учетная запись в моем приложении и учетная запись на стороннем веб-сайте.)

Для этого стороннего веб-сайта нет API, поэтому я использую URLlib для входа в систему.Кроме того, все взаимодействия с этим сторонним приложением осуществляются через Celery Queue, поэтому нет никакой связи между внешним интерфейсом моего приложения и фактическим запросом моего приложения к стороннему приложению

Я пытаюсь найтис лучшим способом управления файлами cookie, возвращаемыми сторонним веб-сайтом, чтобы мне не приходилось регистрировать пользователя при каждом действии.

Было бы безумием создать таблицу, которая отображает пользователей на файлы cookie и сериализует файлы cookie в базу данных?

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Расширяя ответ выше:

class MyConnection(models.Model):
    cookie_text = models.TextField(blank=True, null=True, editable=False)

    def __init__(self, *args, **kwargs):
        self.cookie_jar = StringCookieJar(self.cookies)

    def save(self, *args, **kwargs):
        self.cookies = self.cookie_jar.dump()
        return super(Connection, self).save(*args, **kwargs)
1 голос
/ 31 мая 2011

Для тех, кто столкнется с этим в будущем, я смог сохранить файлы cookie в базе данных, используя cookielib (часть urllib) и создав собственный cookie-файл, который выгружает и загружает файлы cookie в виде строк.которые могут быть сохранены в БД:

class StringCookieJar(cookielib.CookieJar):
    def __init__(self, cookie_string="", policy=None):
        cookielib.CookieJar.__init__(self, policy)
            if cookie_string:
                self._cookies = pickle.loads(cookie_string)
    def dump(self):
            return pickle.dumps(self._cookies)

При создании экземпляра моего объекта подключения я установил средство открытия urllib с моей собственной cookielib:

self.cookiejar = StringCookieJar(cookie_string=str(self.account.cookies))
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookiejar))

где self.account.cookies - это поле в базе данных, которое я использую для хранения моей строки cookie:

cookies = models.CharField(max_length=2000, blank=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...