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

0 投票
1 回答
1500 浏览
提问于 2025-04-16 01:59

我正在使用一个网络服务后台来为Django提供身份验证,而get_user方法需要保留网络服务提供的一个cookie,以便与会话关联。现在,我通过调用urllib2.urlopen(myTargetService)来进行远程请求,但这样做并没有把当前会话的cookie传递过去。

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

class SessionAccessMiddleware:

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

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

我该怎么做呢?

1 个回答

0

这里有一些例子,展示了如何使用 urllib2cookielib 来完成你想做的事情,具体可以参考这个链接:http://docs.python.org/library/cookielib.html#examples。根据文档,你需要创建一个 cookielib.CookieJar,然后用正确的数据(来自会话)设置cookie,接着构建一个使用你这个 CookieJaropener,最后用它来获取 yourTargetService 的内容。

如果你在中间件代码中的 settings 是指 from django.conf import settings,那就不太好。你可以查看这个链接:http://github.com/svetlyak40wt/django-globals/,它提供了一个安全存储请求范围内数据的地方,这样你就可以在 request 对象无法访问的地方使用这些数据。此外,写一个自定义的认证后端并与 django.contrib.auth 一起使用,可能是个不错的主意,而不是从头开始自己做一个认证系统,相关内容可以在这里找到:http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend

撰写回答