Ticket #7770: 7770.3.diff
File 7770.3.diff, 4.6 KB (added by , 14 years ago) |
---|
-
django/http/__init__.py
diff --git a/django/http/__init__.py b/django/http/__init__.py index e585a71..46232be 100644
a b 1 import datetime 1 2 import os 2 3 import re 4 import time 3 5 from Cookie import BaseCookie, SimpleCookie, CookieError 4 6 from pprint import pformat 5 7 from urllib import urlencode … … except ImportError: 12 14 13 15 from django.utils.datastructures import MultiValueDict, ImmutableList 14 16 from django.utils.encoding import smart_str, iri_to_uri, force_unicode 17 from django.utils.http import cookie_date 15 18 from django.http.multipartparser import MultiPartParser 16 19 from django.conf import settings 17 20 from django.core.files import uploadhandler … … class HttpResponse(object): 373 376 374 377 def set_cookie(self, key, value='', max_age=None, expires=None, path='/', 375 378 domain=None, secure=False): 379 """ 380 Sets a cookie. 381 382 ``expires`` can be a string in the correct format or a 383 ``datetime.datetime`` object in UTC. If ``expires`` is a datetime 384 object then ``max_age`` will be calculated. 385 """ 376 386 self.cookies[key] = value 387 if expires is not None: 388 if isinstance(expires, datetime.datetime): 389 delta = expires - expires.utcnow() 390 # Add one second so the date matches exactly (a fraction of 391 # time gets lost between converting to a timedelta and 392 # then the date string). 393 delta = delta + datetime.timedelta(seconds=1) 394 # Just set max_age - the max_age logic will set expires. 395 expires = None 396 max_age = max(0, delta.days * 86400 + delta.seconds) 397 else: 398 self.cookies[key]['expires'] = expires 377 399 if max_age is not None: 378 400 self.cookies[key]['max-age'] = max_age 379 if expires is not None: 380 self.cookies[key]['expires'] = expires 401 # IE requires expires, so set it if hasn't been already. 402 if not expires: 403 self.cookies[key]['expires'] = cookie_date(time.time() + 404 max_age) 381 405 if path is not None: 382 406 self.cookies[key]['path'] = path 383 407 if domain is not None: -
docs/ref/request-response.txt
diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt index bf984f4..2abfb8c 100644
a b Methods 514 514 515 515 * ``max_age`` should be a number of seconds, or ``None`` (default) if 516 516 the cookie should last only as long as the client's browser session. 517 * ``expires`` should be a string in the format 518 ``"Wdy, DD-Mon-YY HH:MM:SS GMT"``. 517 If ``expires`` is not specified, it will be calculated. 518 * ``expires`` should either be a string in the format 519 ``"Wdy, DD-Mon-YY HH:MM:SS GMT"`` or a ``datetime.datetime`` object 520 in UTC. If ``expires`` is a ``datetime`` object, the ``max_age`` 521 will be calculated. 519 522 * Use ``domain`` if you want to set a cross-domain cookie. For example, 520 523 ``domain=".lawrence.com"`` will set a cookie that is readable by 521 524 the domains www.lawrence.com, blogs.lawrence.com and -
tests/regressiontests/requests/tests.py
diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py index 1615a73..22bc88c 100644
a b 1 1 """ 2 >>> from django.http import HttpRequest 2 >>> from django.http import HttpRequest, HttpResponse 3 3 >>> print repr(HttpRequest()) 4 4 <HttpRequest 5 5 GET:{}, … … https://www.example.com/asdf 44 44 >>> request.path = '' 45 45 >>> print request.build_absolute_uri(location="/path/with:colons") 46 46 http://www.example.com/path/with:colons 47 48 49 # Test cookie datetime expiration logic 50 >>> from datetime import datetime, timedelta 51 >>> delta = timedelta(seconds=10) 52 >>> response = HttpResponse() 53 >>> response.set_cookie('datetime', expires=datetime.utcnow()+delta) 54 >>> datetime_cookie = response.cookies['datetime'] 55 >>> datetime_cookie['max-age'] 56 10 57 >>> response.set_cookie('datetime', expires=datetime(2028, 1, 1, 4, 5, 6)) 58 >>> response.cookies['datetime']['expires'] 59 'Sat, 01-Jan-2028 04:05:06 GMT' 60 61 # Test automatically setting cookie expires if only max_age is provided 62 >>> response.set_cookie('max_age', max_age=10) 63 >>> max_age_cookie = response.cookies['max_age'] 64 >>> max_age_cookie['max-age'] 65 10 66 >>> from django.utils.http import cookie_date 67 >>> import time 68 >>> max_age_cookie['expires'] == cookie_date(time.time()+10) 69 True 47 70 """