Как создать в Django HTTP-клиент с поддержкой локальных файлов cookie для сеанса? - PullRequest
0 голосов
/ 29 июля 2010

Я использую серверную часть веб-службы для проверки подлинности 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 запоминает мои куки-файлы в зависимости от сеанса.

Как мне это сделать?

1 Ответ

0 голосов
/ 29 июля 2010

Здесь: http://docs.python.org/library/cookielib.html#examples - это примеры того, что вы пытаетесь делать с urllib2 и cookielib.Таким образом, в соответствии с документацией вам необходимо создать cookielib.CookieJar, установить cookie с правильными данными (из сеанса), создать opener, который использует ваш CookieJar и использовать его для получения 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.

...