【问题标题】:Object as session value in Django对象作为 Django 中的会话值
【发布时间】:2014-04-17 09:38:08
【问题描述】:

我想在 django 中使用 mechanize 的实例作为会话变量,因为它有 cookie。 (构建一些通过登录解析网站数据的网络应用)

        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

有什么方法可以做到这一点?我有点不知所措:/

【问题讨论】:

  • 使用中间件存储你的会话值
  • request.session['username'] = 'hello' 就像我有会话工作一样。只是无法像我的帖子中那样传递对象?
  • docs.djangoproject.com/en/dev/topics/http/sessions你看过这个文档吗,如果没有的话会有用:)

标签: python django session object mechanize


【解决方案1】:

Django 使用Pickling 将对象序列化为会话值。我的猜测是 mechanize Browser 对象没有实现 Pickle 序列化协议,因此无法转换为可以加载回 Python 对象的有效字符串。

我认为您最好的选择可能是从 Browser 会话中提取 cookie 并将它们转换为字符串,将它们保存到用户的会话中,然后使用这些保存的 cookie 值重新实例化 Browser 对象(如果机械化允许这样做)。祝你好运!

【讨论】:

  • 嗯,是的,这将是一种希望 :D 我去试试。谢谢
猜你喜欢
  • 2014-09-16
  • 2014-07-11
  • 1970-01-01
  • 2017-06-10
  • 2012-06-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多