Django中对象作为会话值

0 投票
1 回答
615 浏览
提问于 2025-04-18 03:03

我想在Django中使用mechanize的一个实例作为会话变量,因为它可以处理cookies。(我正在构建一个网络应用,目的是解析一个需要登录的网站的数据)

        browser = mechanize.Browser()

        browser.open('https://www.somewebsite.html')
        browser.select_form(nr=0)
        browser.form['j_username'] = 'test'
        browser.form['j_password'] = 'test'

        browser.submit() #now browser has cookies in this instance

        request.session['browser'] = browser   #this doesn't work

但是这样不行,所以我尝试使用cookiejar,这样我就可以把它作为会话变量,但我想这还是会遇到同样的问题,就是我试图把一个对象作为会话变量...

        cj = cookielib.LWPCookieJar()
        browser.set_cookiejar(cj)
        #some code here

        request.session['cj'] = cj #doesn't work again

有没有什么办法可以做到这一点?我有点无从下手 :/

1 个回答

0

Django使用一种叫做Pickling的方式,把对象转成可以存储在会话中的值。我猜测,mechanize的Browser对象没有实现Pickle的序列化协议,所以它不能被转换成一个有效的字符串,无法再变回Python对象。

我觉得你最好的办法可能是从Browser会话中提取出cookies,把它们转换成字符串,保存到用户的会话中,然后用这些保存的cookie值重新创建一个Browser对象(如果mechanize允许这样做的话)。祝你好运!

撰写回答