Django中对象作为会话值
我想在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允许这样做的话)。祝你好运!