如何在Django中创建一个会话本地cookie感知HTTP客户端?

时间:2010-07-28 22:21:52

标签: python django http cookies urllib2

我正在使用Web服务后端为Django提供身份验证,并且get_user方法必须保留Web服务提供的cookie以便与会话关联。现在,我只是通过调用urllib2.urlopen(myTargetService)来进行远程调用,但这并没有传递当前会话的cookie。

我创建了一个会话访问中间件来将会话存储在设置中:

class SessionAccessMiddleware:

  def process_request(self, request):
    settings.current_session = request.session

所以,我可以在get_request和post_request中访问请求会话,但我不知道如何让urllib2以特定于会话的方式记住我的cookie。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

此处:http://docs.python.org/library/cookielib.html#examples是您尝试使用urllib2cookielib执行操作的示例。因此,根据您需要创建cookielib.CookieJar的文档,使用正确的数据(来自会话)设置Cookie,构建使用opener的{​​{1}}并使用它来获取CookieJar

如果您的中间件代码中的yourTargetService意味着settings,那么这不是个好主意。查看http://github.com/svetlyak40wt/django-globals/,您可以安全地存储请求范围的数据,以便从from django.conf import settings对象无法访问的地方进行访问。此外,编写自定义身份验证后端并将其与request一起使用可能是个好主意 - 而不是从头开始编辑您自己的身份验证系统 - 这将在此处介绍:http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend