Database 在数据库中保存cookies(代表用户发出请求)

Database 在数据库中保存cookies(代表用户发出请求),database,django,web-applications,cookies,Database,Django,Web Applications,Cookies,我正在facebook上创建一个webapp,允许用户提供第三方网站的登录详细信息,并通过我的应用向该服务发出请求。(即,他们在我的应用程序上有一个帐户,在第三方网站上有一个帐户。) 这个第三方网站没有API,所以我使用URLlib进行登录。此外,与此第三方应用程序的所有交互都是通过芹菜队列进行的,因此我的应用程序前端与我的应用程序向第三方发出的实际请求之间没有链接 我正在努力想出最好的方法来管理第三方网站返回的cookies,这样我就不必在每次操作时都让用户登录 创建一个将用户映射到cooki

我正在facebook上创建一个webapp,允许用户提供第三方网站的登录详细信息,并通过我的应用向该服务发出请求。(即,他们在我的应用程序上有一个帐户,在第三方网站上有一个帐户。)

这个第三方网站没有API,所以我使用URLlib进行登录。此外,与此第三方应用程序的所有交互都是通过芹菜队列进行的,因此我的应用程序前端与我的应用程序向第三方发出的实际请求之间没有链接

我正在努力想出最好的方法来管理第三方网站返回的cookies,这样我就不必在每次操作时都让用户登录


创建一个将用户映射到cookie并将cookie序列化到数据库中的表是否疯狂

对于将来遇到这种情况的任何人,我都可以使用cookielib(urllib的一部分)并创建我自己的cookiejar,将Cookie作为字符串转储和加载到数据库中,这些字符串可以保存在DB中:

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)
在创建连接对象的实例时,我使用自定义cookielib设置urllib开启器:

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)

对上述答案进行扩展:

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)