综合二区_欧美成人综合_欧美成人二区_a黄视频_亚洲视频在线播放_一区二区三区视频免费看

µ±Ç°Î»ÖãºÊ×Ò³ > ÍøÕ¾¾ÉÀ¸Ä¿ > ѧϰ԰µØ > Éè¼ÆÈí¼þ½Ì³Ì > ·­Òëwww.djangobook.comÖ®µÚÊ®ËÄÕ£º»º´æ

·­Òëwww.djangobook.comÖ®µÚÊ®ËÄÕ£º»º´æ
2010-01-13 23:42:06  ×÷Õß:  À´Ô´:
¾²Ì¬ÍøÕ¾µÄ¼òµ¥ÎļþÖ±½Ó·þÎñÓÚWeb£¬ÐÔÄܺܺ㬵«ÊǶ¯Ì¬ÍøÕ¾µÄÒ»¸ö»ù±¾µÄȨºâÊÇËüÃÇÊǶ¯Ì¬µÄ£¬Ã¿´ÎÓû§ÇëÇóÒ»¸öÒ³Ãæ
Web·þÎñÆ÷»áÖ´Ðи÷ÖÖ¼ÆËã--´ÓÊý¾Ý¿â²éѯµ½Ä£°åäÖȾµ½ÉÌÒµÂß¼­--À´´´½¨ÄãµÄÕ¾µãµÄ·ÃÎÊÕß¿´µ½µÄÒ³Ãæ£¬´Ó´¦Àí¹ý¶ÈµÄ½Ç
¶ÈÀ´¿´£¬Õâ´ú¼Û·Ç³£°º¹ó
¶ÔÓÚ´ó¶àÊýWebÓ¦Ó㬹ý¶È²»ÊÇ´óÎÊÌ⣬´ó²¿·ÖWeb³ÌÐò²»ÊÇwashingtonpost.com»òÕßslashdot.org£¬ËüÃÇÖ»ÊǼòµ¥µÄСµÄ
µ½ÖеȴóСµÄÁ÷Á¿²»¹ýÈç´ËµÄÕ¾µã£¬µ«ÊǶÔÓÚÖеȵ½¸ßÁ÷Á¿µÄÕ¾µã£¬¾¡¿ÉÄܶàµÄÈ¥³ý¹ý¶È¾ÍºÜÖØÒª£¬ËùÒÔ»º´æÀ´ÁË
»º´æ¾ÍÊǰÑÒ»¸ö°º¹ó¼ÆËãµÄ½á¹û±£´æÆðÀ´£¬ÓÚÊÇÄãÏ´β»ÐèÒªÔÙ¼ÆËãÒ»´Î£¬ÕâÀïÊǽâÊÍËüÔõÑùΪ¶¯Ì¬ÍøÒ³¹¤×÷µÄα´úÂë:
Java´úÂë ¸´ÖÆ´úÂë
  1. given a URL, try finding that page in the cache   
  2. if the page is in the cache:   
  3.     return the cached page   
  4. else:   
  5.     generate the page   
  6.     save the generated page in the cache (for next time)   
  7.     return the generated page  

Django´øÓÐÒ»¸ö½¡×³µÄ»º´æÏµÍ³£¬ËüʹµÃÄã¿ÉÒÔ±£´æ¶¯Ì¬Ò³Ã棬ÓÚÊÇËüÃDz»ÐèÒª¶Ôÿ¸öÇëÇó¶¼¼ÆË㣬·½±ãÆð¼û£¬DjangoÌṩ
Á˲»Í¬¼¶±ðµÄ»º´æÁ£¶È£¬Äã¿ÉÒÔ»º´æÌØÊâÊÓͼµÄÊä³ö£¬¿ÉÒÔÖ»»º´æºÜÄÑÉú³ÉµÄ²¿·Ö£¬Ò²¿ÉÒÔ»º´æÄãµÄÕû¸öÕ¾µã
DjangoÒ²ºÍ"ÉÏÓÎ"»º´æ¹¤×÷µÄºÜºÃ£¬ÀýÈçSquid(http://www.squid-cache.org)ºÍ»ùÓÚä¯ÀÀÆ÷µÄ»º´æ£¬ÕâЩÀàÐÍ
µÄ»º´æÄã²»Ö±½Ó¿ØÖÆ£¬µ«ÊÇÄã¿ÉÒÔÌṩ¹ØÓÚÄãµÄÕ¾µãÄIJ¿·ÖÓ¦¸Ã±»»º´æºÍÔõÑù»º´æµÄÏßË÷(ͨ¹ýHTTPÍ·²¿)¸øËüÃÇ

É趨»º´æ
»º´æÏµÍ³ÐèҪһЩÉÙÁ¿µÄÉ趨¹¤×÷£¬¼´Äã±ØÐè¸æËßËüÄãµÄ»º´æÊý¾ÝÔÚÄÄÀï--ÔÚÊý¾Ý¿â£¬Îļþϵͳ»òÕßÖ±½ÓÔÚÄÚ´æÖУ¬ÕâÊÇÓ°
ÏìÄãµÄ»º´æÐÔÄܵÄÖØÒª¾ö¶¨£¬ÊǵÄ£¬Ò»Ð©»º´æÀàÐÍÒª±ÈÆäËüµÄ¿ì£¬Äڴ滺´æÍ¨³£±ÈÎļþϵͳ»òÊý¾Ý¿â»º´æ¿ì£¬ÒòΪǰÕßûÓÐ
·ÃÎÊÎļþϵͳ»òÊý¾Ý¿âµÄ¹ý¶È
ÄãµÄ»º´æÑ¡ÔñÔÚÄãµÄsettingsÎļþµÄCACHE_BACKENDÉèÖÃÖУ¬Èç¹ûÄãʹÓûº´æµ«Ã»ÓÐÖ¸¶¨CACHE_BACKEND£¬Django½«Ä¬ÈÏʹÓÃ
simple:///£¬ÏÂÃæ½âÊÍÁËCACHE_BACKENDµÄËùÓпɵõ½µÄÖµ

Memcached
ĿǰΪֹDjango¿ÉµÃµ½µÄ×î¿ìµÄ×î¸ßЧµÄ»º´æÀàÐÍÊÇ»ùÓÚÄÚ´æµÄ»º´æ¿ò¼ÜMemcached£¬ËüÆð³õ¿ª·¢À´ÎªLiveJournal.com´¦Àí
¸ß¸ººÉ²¢Ëæºó±»Danga Interactive(http://www.danga.com)¿ªÔ´£¬Ëü±»SlashdotºÍWikipediaµÈÕ¾µãʹÓÃÀ´¼õÉÙ
Êý¾Ý¿â·ÃÎʺÍÏ·¾ç°ãµÄÔö¼ÓÕ¾µãÐÔÄÜ
Memcached¿ÉÒÔÔÚhttp://danga.com/memcached/Ãâ·ÑµÃµ½£¬Ëü×÷Ϊºǫ́½ø³ÌÔËÐв¢·ÖÅäÒ»¸öÖ¸¶¨ÊýÁ¿µÄRAM--Ϊ
ÔÚ»º´æÖÐÌí¼Ó£¬µÃµ½ºÍɾ³ýÈÎÒâÊý¾Ý£¬ËùÓеÄÊý¾ÝÖ±½Ó´æ´¢ÔÚÄÚ´æÖУ¬ËùÒÔûÓÐÊý¾Ý¿âºÍÎļþϵͳʹÓõĹý¶È
ÔÚ°²×°ÁËMemcached±¾ÉíÖ®ºó£¬Ä㽫ÐèÒª°²×°Memcached Python°ó¶¨£¬ËüûÓÐÖ±½ÓºÍDjango°ó¶¨£¬ÕâЩ°ó¶¨ÔÚÒ»¸öµ¥¶ÀµÄ
PythonÄ£¿éÖУ¬memcache.py£¬¿ÉÒÔÔÚhttp://www.djangoproject.com/thirdparty/python-memcachedµÃµ½
ÉèÖÃCACHE_BACKENDΪmemcached://ip:port/À´ÈÃDjangoʹÓÃMemcached£¬ÕâÀïµÄipÊÇMemcachedºǫ́½ø³ÌµÄIPµØÖ·£¬portÔòÊÇ
MemcachedÔËÐÐËùÔڵĶ˿Ú
ÔÚÕâ¸öÀý×ÓÖУ¬MemcachedÔËÐÐÔÚlocalhost(127.0.0.1)¶Ë¿Ú11211:
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
MemcachedµÄÒ»¸ö¼«ºÃµÄÌØÐÔÊÇËüÔÚ¶à¸ö·þÎñÆ÷·ÖÏí»º´æµÄÄÜÁ¦£¬ÕâÒâζ×ÅÄã¿ÉÒÔÔÚ¶ą̀»úÆ÷ÉÏÔËÐÐMemcached½ø³Ì£¬³ÌÐò½«
»á°ÑÕâ×é»úÆ÷µ±×÷Ò»¸öµ¥¶ÀµÄ»º´æ£¬¶ø²»ÐèÒªÔÚÿ̨»úÆ÷Éϸ´ÖÆ»º´æÖµ£¬ÎªÁËÈÃDjangoÀûÓôËÌØÐÔ£¬ÐèÒªÔÚCACHE_BACKEND
Àï°üº¬ËùÓеķþÎñÆ÷µØÖ·²¢Ó÷ֺŷָô
Õâ¸öÀý×ÓÖУ¬»º´æÔÚÔËÐÐÔÚ172.19.26.240ºÍ172.19.26.242µÄIPµØÖ·ºÍ11211¶Ë¿ÚµÄMemcachedʵÀý¼ä·ÖÏí:
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'
Õâ¸öÀý×ÓÖУ¬»º´æÔÚÔËÐÐÔÚ172.19.26.240(¶Ë¿Ú11211)£¬172.19.26.242(¶Ë¿Ú11212)£¬172.19.26.244(¶Ë¿Ú11213)µÄMemcach
edʵÀý¼ä·ÖÏí:
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/'
×îºó¹ØÓÚMemcachedµÄÊÇ»ùÓÚÄÚ´æµÄ»º´æÓÐÒ»¸öÖØ´óµÄȱµã£¬ÒòΪ»º´æÊý¾ÝÖ»´æ´¢ÔÚÄÚ´æÖУ¬ÔòÈç¹û·þÎñÆ÷ËÀ»úµÄ»°Êý¾Ý»á¶ª
ʧ£¬ÏÔÈ»ÄÚ´æ²»ÊÇΪ³Ö¾ÃÊý¾Ý´æ´¢×¼±¸µÄ£¬DjangoûÓÐÒ»¸ö»º´æºó¶ËÊÇÓÃÀ´×ö³Ö¾Ã´æ´¢µÄ£¬ËüÃǶ¼ÊÇ»º´æ·½°¸£¬¶ø²»ÊÇ´æ´¢
µ«ÊÇÎÒÃÇÔÚÕâÀïÖ¸³öÊÇÒòΪ»ùÓÚÄÚ´æµÄ»º´æÌرðµÄ¶ÌÔÝ

Êý¾Ý¿â»º´æ
ÔÚÄãµÄÊý¾Ý¿â´´½¨»º´æ±í²¢ÔÚ±íÀïÖ¸³öDjangoµÄ»º´æÏµÍ³À´Ê¹ÓÃÊý¾Ý¿â±í×÷Ϊ»º´æºó¶Ë£¬Ê×ÏÈÔËÐÐÕâ¸öÃüÁî´´½¨»º´æ±í:
python manage.py createcachetable [cache_table_name]
ÕâÀïµÄ[cache_table_name]ÊÇÒª´´½¨µÄÊý¾Ý¿â±íÃû£¬Ãû×Ö¿ÉÒÔÊÇÈκÎÄãÏëÒªµÄ£¬Ö»ÒªËüÊǺϷ¨µÄÔÚÄãµÄÊý¾Ý¿âÖÐûÓб»Ê¹ÓÃ
Õâ¸öÃüÁîÔÚÄãµÄÊý¾Ý¿â´´½¨Ò»¸ö×ñÑ­DjangoµÄÊý¾Ý¿â»º´æÏµÍ³ÆÚÍûÐÎʽµÄµ¥¶ÀµÄ±í
Ò»µ©Äã´´½¨ÁËÊý¾Ý¿â±í£¬ÉèÖÃÄãµÄCACHE_BACKENDÉèÖÃΪ"db://tablename"£¬ÕâÀïµÄtablenameÊÇÊý¾Ý¿â±íµÄÃû×Ö£¬ÔÚÕâ¸öÀý
×ÓÖУ¬»º´æ±íÃûΪmy_cache_table:
CACHE_BACKEND = 'db://my_cache_table'
Êý¾Ý¿â»º´æºó¶ËʹÓÃÄãµÄsettingsÎļþÖ¸¶¨µÄͬһÊý¾Ý¿â£¬Äã²»ÄÜΪÄãµÄ»º´æ±íʹÓò»Í¬µÄÊý¾Ý¿âºó¶Ë

Îļþϵͳ»º´æ
ʹÓÃ"file://"»º´æÀàÐÍ×÷ΪCACHE_BACKEND²¢Ö¸¶¨´æ´¢»º´æÊý¾ÝµÄÎļþϵͳĿ¼À´ÔÚÎļþϵͳ´æ´¢»º´æÌõÄ¿
ÀýÈ磬ʹÓÃÏÂÃæµÄÉèÖÃÀ´ÔÚ/var/tmp/django_cache´æ´¢»º´æÊý¾Ý:
CACHE_BACKEND = 'file:///var/tmp/django_cache'
×¢ÒâÀý×ÓÖпªÍ·ÓÐÈý¸öǰбÏߣ¬Ç°Á½¸öÊÇfile://£¬µÚÈý¸öÊÇĿ¼·¾¶µÄµÚÒ»¸ö×Ö·û£¬/var/tmp/django_cache£¬Èç¹ûÄãʹÓÃ
Windows£¬°ÑÅÌ·û×Öĸ·ÅÔÚfile://ºóÃæ£¬ÏñÕâÑù:file://c:/foo/bar
Ŀ¼·¾¶Ó¦¸ÃÊǾø¶Ô·¾¶£¬¼´Ó¦¸ÃÒÔÄãµÄÎļþϵͳµÄ¸ù¿ªÊ¼£¬ÄãÔÚÉèÖõĽáβ·ÅÖÃбÏßÓë·ñÎ޹ؽôÒª
È·ÈϸÃÉèÖÃÖ¸ÏòµÄĿ¼´æÔÚ²¢ÇÒÄãµÄWeb·þÎñÆ÷ÔËÐеÄϵͳµÄÓû§¿ÉÒÔ¶Áд¸ÃĿ¼£¬¼ÌÐøÉÏÃæµÄÀý×Ó£¬Èç¹ûÄãµÄ·þÎñÆ÷ÒÔÓû§
apacheÔËÐУ¬È·ÈÏ/var/tmp/django_cache´æÔÚ²¢ÇÒÓû§apache¿ÉÒÔ¶Áд/var/tmp/django_cacheĿ¼
ÿ¸ö»º´æÖµ½«±»´æ´¢Îªµ¥¶ÀµÄÎļþ£¬ÆäÄÚÈÝÊÇPythonµÄpickleÄ£¿éÒÔÐòÁл¯("pickled")ÐÎʽ±£´æµÄ»º´æÊý¾Ý£¬Ã¿¸öÎļþµÄ
ÎļþÃûÊÇ»º´æ¼ü£¬²¢escapeΪ°²È«µÄÎļþϵͳʹÓÃ

±¾µØ´æ´¢Æ÷»º´æ
Èç¹ûÄãÏëÒªÄڴ滺´æµÄËÙ¶ÈÓÅÊÆµ«Ã»ÓÐÄÜÁ¦ÔËÐÐMemcached£¬¿ÉÒÔ¿¼ÂÇʹÓñ¾µØ´æ´¢Æ÷»º´æºó¶Ë£¬¸Ã»º´æÊǶàÏ̺߳ÍḬ̈߳²È«
µÄ£¬µ«ÊÇÓÉÓÚÆä¼òµ¥µÄËøºÍÄÚ´æ·ÖÅä²ßÂÔËüûÓÐMemcached¸ßЧ
ÉèÖÃCACHE_BACKENDΪ'locmem:///'À´Ê¹ÓÃËü£¬ÀýÈç:
CACHE_BACKEND = 'locmem:///'

¼òµ¥»º´æ(¿ª·¢ÓÃ)
'simple:///'ÊÇÒ»¸ö¼òµ¥£¬µ¥Ï̵߳ÄÄڴ滺´æ£¬ËüÖ»ÔÚ³ÌÐòÖб£´æ»º´æÊý¾Ý£¬ÕâÒâζ×ÅËüÖ»ÄÜÔÚ¿ª·¢»ò²âÊÔ»·¾³ÏÂʹÓã¬Èç:
CACHE_BACKEND = 'simple:///'

¼Ù»º´æ(¿ª·¢ÓÃ)
×îºó£¬Django´øÓÐÒ»¸ö"¼Ù"»º´æ£¬ËüÊÂʵÉϲ»»º´æ--ËüÖ»ÊÇʵÏÖÁË»º´æ½Ó¿Úµ«²»×öÈκÎÊÂÇé
Èç¹ûÄãÓÐÒ»¸ö²úÆ·Õ¾µã£¬Õ¾µãÔÚ²»Í¬µÄµØ·½Ê¹ÓÃÖØÐÍ»º´æµ«¿ª·¢ºÍ²âÊÔ»·¾³ÖÐÄã²»ÏëʹÓûº´æ£¬ÔòËüÊǺÜÓÐÓõÄ£¬ÕâÖÖÇé¿ö
Ï£¬ÔÚsettingsÎļþÖÐÉèÖÃCACHE_BACKENDΪ'dummy:///'À´×ö¿ª·¢»·¾³£¬ÕâÑùÄãµÄ¿ª·¢»·¾³¾Í²»»áʹÓûº´æµ«ÄãµÄ²úÆ·»·¾³
ÈÔÈ»»áʹÓã¬ÀýÈç:
CACHE_BACKEND = 'dummy:///'

CACHE_BACKEND²ÎÊý
ÿ¸ö»º´æºó¶Ë¶¼¿ÉÄÜʹÓòÎÊý£¬ËüÃÇÔÚCACHE_BACKENDÉèÖÃÖÐÒÔ²éѯ×Ö·û´®ÐÎʽ¸ø³ö£¬ºÏ·¨µÄ²ÎÊýΪ:
1£¬timeout--»º´æÄ¬Èϵij¬Ê±ÏÞ¶¨£¬ÒÔÃëΪµ¥Î»£¬Ä¬ÈÏΪ300Ãë(5·ÖÖÓ)
2£¬max_entries--¼òµ¥ºó¶Ë£¬±¾µØ´æ´¢Æ÷ºó¶ËºÍÊý¾Ý¿âºó¶Ë»º´æÔÚ¾ÉÖµÇå³þǰÔÊÐíµÄ×î´óµÄÌõÄ¿£¬Ä¬ÈÏΪ300
3£¬cull_percentage--µ±µ½´ïmax_entriesʱѡÔñµÄÌõÄ¿µÄ±ÈÂÊ£¬×¼È·µÄ±ÈÂÊÊÇ1/cull_percentage£¬ËùÒÔÉèÖÃcull_percenta
ge=2Ôòµ±max_entriesµ½´ïʱ»áÑ¡Ôñ1/2µÄÌõÄ¿
cull_percentage=0±íʾµ±µ½´ïmax_entriesʱÌõÄ¿»º´æ½«±»Çå³ý£¬ÕâÒÔ¸ü¶àµÄ»º´æÈ±Ê§Îª´ú¼ÛÈÃÑ¡Ôñ¸ü¿ì£¬Ä¬ÈÏֵΪ3
Õâ¸öÀý×ÓÖУ¬timeoutÉèÖÃΪ60:
CACHE_BACKEND = "locmem:///?timeout=60"
Õâ¸öÀý×ÓÖУ¬timeoutΪ30²¢ÇÒmax_entriesΪ400:
CACHE_BACKEND = "locmem:///?timeout=30&max_entries=400"
²»ºÏ·¨µÄ²ÎÊý±»¾²¾²µÄºöÂÔ£¬×÷ΪÒÑÖª²ÎÊýµÄ·Ç·¨Öµ

ÕûÕ¾»º´æ
Ò»µ©ÄãÖ¸¶¨ÁËCACHE_BACKEND£¬Ê¹Óûº´æµÄ×î¼òµ¥µÄ·½Ê½ÊÇ»º´æÄãµÄÕû¸öÕ¾µã£¬ÕâÒâζ×Åÿ¸öûÓÐGET»òPOST²ÎÊýµÄÒ³ÃæµÚÒ»
´ÎÇëÇóʱ¶¼»á»º´æÒ»¶ÎÌØÓеÄʱ¼ä
°Ñ'django.middleware.cache.CacheMiddleware'Ìí¼Óµ½ÄãµÄMIDDLEWARE_CLASSESÉèÖÃÖÐÀ´¼¤»îÕûÕ¾»º´æ£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. MIDDLEWARE_CLASSES = (   
  2.     'django.middleware.cache.CacheMiddleware',   
  3.     'django.middleware.common.CommonMiddleware',   
  4. )  

(MIDDLEWARE_CLASSESµÄ˳ÐòÓйØÏµ£¬²Î¿¼ÏÂÃæµÄ"MIDDLEWARE_CLASSESµÄ˳Ðò")
È»ºó£¬ÔÚÄãµÄDjango settingsÎļþÖÐÌí¼ÓÏÂÁбØÐèÉèÖÃ:
1£¬CACHE_MIDDLEWARE_SECONDS--ÿ¸öÒ³ÃæÓ¦¸Ã±»»º´æµÄÃëÊý
2£¬CACHE_MIDDLEWARE_KEY_PREFIX--Èç¹ûÔÚͬһDjango°²×°µÄ¶à¸öÕ¾µã·ÖÏí»º´æ£¬ÉèÖÃËüΪվµãÃû£¬»òÕ߯äËüΨһ´ú±íµ±Ç°
DjangoʵÀýµÄ×Ö·û´®À´·ÀÖ¹¼ü³åÍ»£¬Èç¹ûÄã²»ÔÚÒâÔò¿ÉÒÔʹÓÿÕ×Ö·û´®
»º´æÖмä¼þ»º´æÃ¿¸öûÓÐGET»òÕßPOST²ÎÊýµÄÒ³Ãæ£¬¼´Èç¹ûÓû§ÇëÇóÒ³Ãæ²¢ÔÚ²éѯ×Ö·û´®Àï´«µÝGET²ÎÊý»òÕßPOST²ÎÊý£¬Öмä
¼þ½«²»»á³¢ÊԵõ½»º´æ°æ±¾µÄÒ³Ãæ£¬Èç¹ûÄã´òËãʹÓÃÕûÕ¾»º´æ£¬Éè¼ÆÄãµÄ³ÌÐòʱÀμÇÕâµã£¬ÀýÈ磬²»ÒªÊ¹ÓÃÓµÓвéѯ×Ö·û´®
µÄURLs£¬³ý·ÇÄÇÐ©Ò³Ãæ¿ÉÒÔ²»»º´æ
»º´æÖмä¼þÖ§³ÖÁíÒ»¸öÉèÖã¬CACHE_MIDDLEWARE_ANONYMOUS_ONLY£¬Èç¹ûÄ㶨ÒåÁËÕâ¸öÉèÖ㬲¢ÇÒÖµÉèΪTrue£¬Ôò»º´æÖмä¼þ
½«Ö»»º´æÄäÃûÇëÇ󣬼´ÄÇЩûÓеǼµÄÓû§µÄÇëÇó£¬ÕâÊǶÔÓû§ÌØÓеÄÒ³Ãæ½ûÖ¹»º´æµÄ¼òµ¥ºÍÓÐЧµÄ·½Ê½£¬ÈçDjangoµÄadmin
½çÃæ£¬×¢ÒâÈç¹ûÄãʹÓÃCACHE_MIDDLEWARE_ANONYMOUS_ONLY£¬ÄãÓ¦¸ÃÈ·ÈÏÄãÒѾ­¼¤»îÁËAuthenticationMiddleware²¢ÇÒËüÔÚ
ÄãµÄMIDDLEWARE_CLASSESÖеÄCacheMiddleware֮ǰ
×îºó£¬×¢ÒâCacheMiddleware×Ô¶¯ÎªÃ¿¸öHttpResponseÉèÖÃһЩͷ²¿:
1£¬µ±Ò»¸öÐÂ(û»º´æµÄ)°æ±¾µÄÒ³Ãæ±»ÇëÇóʱÉèÖÃLast-ModifiedÍ·²¿Îªµ±Ç°ÈÕÆÚ/ʱ¼ä
2£¬ÉèÖÃExpiresÍ·²¿Îªµ±Ç°ÈÕÆÚ/ʱ¼ä¼ÓÉ϶¨ÒåµÄCACHE_MIDDLEWARE_SECONDS
3£¬ÉèÖÃCache-ControlÍ·²¿À´¸øÒ³ÃæÒ»¸ö×î´óµÄʱ¼ä--ÔÙÒ»´Î£¬¸ù¾ÝCACHE_MIDDLEWARE_SECONDSÉèÖÃ

ÊÓͼ»º´æ
Ò»¸ö¸üϸÁ£¶ÈµÄʹÓûº´æ¿ò¼ÜµÄ·½Ê½ÊÇ»º´æµ¥¶ÀÊÓͼµÄÊä³ö£¬ËüºÍÕûÕ¾»º´æÓÐÒ»ÑùµÄЧ¹û(°üÀ¨ºöÂÔÓÐGETºÍPOST²ÎÊýµÄÇëÇó)
ËüÊʺÏÈκÎÄãÖ¸¶¨µÄÊÓͼ£¬¶ø²»ÊÇÕû¸öÕ¾µã
ͨ¹ýʹÓÃÒ»¸ö×°ÊÎÆ÷--Ò»¸ö¸Ä±äÄãµÄÊÓͼ·½·¨µÄÐÐΪÀ´Ê¹Óûº´æµÄ·â×°Æ÷À´Ê¹ÓÃÊÓͼ»º´æ£¬ÊÓͼ»º´æ×°ÊÎÆ÷½Ðcache_page
ËüλÓÚdjango.views.decorators.cacheÄ£¿é£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.views.decorators.cache import cache_page   
  2.   
  3. def my_view(request, param):   
  4.     # ...   
  5. my_view = cache_page(my_view, 60 * 15)  

Èç¹ûÄãʹÓÃPython2.4»ò¸ü¸ß£¬Äã¿ÉÒÔʹÓÃ×°ÊÎÆ÷Óï·¨£¬Õâ¸öÀý×ÓÊÇÏàͬµÄ:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.views.decorators.cache import cache_page   
  2.   
  3. @cache_page(60 * 15)   
  4. def my_view(request, param):   
  5.     # ...  

cache_pageʹÓÃÒ»¸öµ¥¶ÀµÄ²ÎÊý:»º´æ³¬Ê±£¬ÒÔÃëΪµ¥Î»£¬ÔÚÉÏÃæµÄÀý×ÓÖУ¬my_view()ÊÓͼµÄ½á¹û½«±»»º´æ15·ÖÖÓ(×¢ÒâÎÒÃÇ
ΪÁ˿ɶÁÐÔ°ÑËüд³ÉÁË60 * 15£¬µÈÓÚ900£¬¼´15·ÖÖÓ³ËÒÔÿ·ÖÖÓ60Ãë)
ÀàËÆÓÚÕûÕ¾»º´æ£¬ÊÓͼ»º´æºÍURLÓйØ£¬Èç¹û¶à¸öURLsÖ¸ÏòͬһÊÓͼ£¬Ôòÿ¸öURL½«±»µ¥¶À»º´æ£¬¼ÌÐømy_viewÀý×Ó£¬Èç¹ûÄãµÄ
URLÅäÖÃÏñÏÂÃæÕâÑù:
Java´úÂë ¸´ÖÆ´úÂë
  1. urlpatterns = ('',   
  2.     (r'^foo/(\d{1,2})/$', my_view),   
  3. )  

Ôò¶Ô/foo/1/ºÍ/foo/23/µÄÇëÇó½«ÏñÄãÆÚÍûµÄÄÇÑù±»µ¥¶À»º´æ£¬µ«ÊÇÒ»µ©Ò»¸öÌØ±ðµÄURL(ÀýÈç/foo/23/)±»ÇëÇó£¬Ôò¸ÃURLºóÐø
µÄÇëÇó½«Ê¹Óûº´æ

ÔÚURLÅäÖÃÖ¸¶¨ÊÓͼ»º´æ
ÉÏÃæµÄÀý×ÓÓ²±àÂëÁËÊÓͼ±»»º´æµÄÊÂʵ£¬ÒòΪcache_pageÔÚÊʵ±µÄλÖøıäÁËmy_viewÊÓͼ£¬ÕâÖÖ·½Ê½ñîºÏÁËÄãµÄÊÓͼºÍ»º´æ
ϵͳ£¬ÔÚһЩ·½ÃæÕâÊDz»ÀíÏëµÄ£¬ÀýÈ磬Äã¿ÉÄÜÏëÖØÓÃÊÓͼ·½·¨µ½ÁíÒ»¸öºÜÉÙ»º´æµÄÕ¾µã£¬»òÕßÄã¿ÉÄÜÏë·¢²¼ÊÓͼ¸øÄÇЩ¿É
ÄÜÏë²»Óûº´æÀ´Ê¹ÓÃËüÃǵÄÈË£¬ÕâЩÎÊÌâµÄ½â¾ö·½°¸ÊÇÔÚURLÅäÖÃÀïÖ¸¶¨ÊÓͼ»º´æ¶ø²»ÊÇÔÚÊÓͼ·½·¨±¾Éí¸½½ü
ÕâºÜÈÝÒ××öµ½£¬µ±ÄãÔÚURLÅäÖÃÀïÒýÓÃËüµÄʱºò¼òµ¥µÄÓÃcache_page°ü×°ÊÓͼ·½·¨£¬ÕâÀïÊÇÉÏÃæ¾ÉµÄURLÅäÖÃ:
Java´úÂë ¸´ÖÆ´úÂë
  1. urlpatterns = ('',   
  2.     (r'^foo/(\d{1,2})/$', my_view),   
  3. )  

ÕâÀïÊÇͬÑùµÄ¶«Î÷£¬µ«ÓÃcache_page°ü×°ÁËmy_view:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.views.decorators.cache import cache_page   
  2.   
  3. urlpatterns = ('',   
  4.     (r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)),   
  5. )  

Èç¹ûÄãʹÓÃÕâÖÖ·½Ê½£¬±ðÍüÁËÔÚÄãµÄURLÅäÖÃÀïimport cache_page

µÍ¼¶»º´æAPI
ÓÐʱºò£¬»º´æÍêÕûäÖȾµÄÒ³Ãæ²»»áÈÃÄãÊÕ»ñºÜ¶à£¬ÊÂʵÉÏ£¬ÕâÓе㲻·½±ã£¬ÀýÈçÄãµÄÕ¾µã°üÀ¨Ò»¸ö½á¹ûÒÀÀµÓÚһЩ°º¹ó²éѯ
µÄ½á¹ûµÄÊÓͼ£¬¶øÇÒ½á¹ûÔÚÒ»¶Îʱ¼äºó»á¸ü¸Ä£¬ÕâÖÖÇé¿öÏ£¬Ê¹ÓÃÕûÕ¾»º´æ»òÊÓͼ»º´æ²ßÂÔÌṩµÄÈ«Ò³Ãæ»º´æ¾Í²»ÊǺÜÀíÏë
ÒòΪÄã²»Ï뻺´æÕû¸ö½á¹û(¼ÈÈ»ÓÐЩÊý¾ÝƵ·±¸ü¸ÄµÄ»°)£¬µ«ÊÇÄãÈÔÈ»Ï뻺´æºÜÉÙ¸ü¸ÄµÄ½á¹û
¶ÔÓÚÕâÖÖÇé¿ö£¬Django±©Â¶ÁËÒ»¸ö¼òµ¥µÍ¼¶µÄ»º´æAPI£¬ËüλÓÚdjango.core.cache£¬Äã¿ÉÒÔʹÓÃÈκÎÁ£¶ÈµÄµÍ¼¶»º´æAPIÀ´
ÔÚ»º´æÖд洢¶ÔÏó£¬Äã¿ÉÒÔ»º´æÈκοÉÒÔ±»°²È«"pickled"µÄPython¶ÔÏó--×Ö·û´®£¬×ֵ䣬ģÐͶÔÏóÁбíµÈµÈ(´ó²¿·Öͨ³£µÄ
Python¶ÔÏ󶼿ÉÒÔ±»pickled£¬²Î¿¼PythonÎĵµµÃµ½¸ü¶à¹ØÓÚpicklingµÄÐÅÏ¢)
ÕâÀïÊÇÔõÑùimportËü:
Java´úÂë ¸´ÖÆ´úÂë
  1. >>> from django.core.cache import cache  

»ù±¾½Ó¿ÚΪset(key, value, timeout_seconds)ºÍget(key):
Java´úÂë ¸´ÖÆ´úÂë
  1. >>> cache.set('my_key''hello, world!'30)   
  2. >>> cache.get('my_key')   
  3. 'hello, world!'  

timeout_seconds²ÎÊý¿ÉÑ¡²¢ÇÒĬÈÏΪÉÏÃæ½âÊ͵ÄCACHE_BACKENDÉèÖÃÖеÄtimeout²ÎÊý
Èç¹û»º´æÖжÔÏó²»´æÔÚ£¬»òÕß»º´æºó¶Ë²»¿ÉµÃµ½£¬Ôòcache.get()·µ»ØNone:
Java´úÂë ¸´ÖÆ´úÂë
  1. # Wait 30 seconds for 'my_key' to expire...   
  2.   
  3. >>> cache.get('my_key')   
  4. None   
  5.   
  6. >>> cache.get('some_unset_key')   
  7. None  

ÎÒÃǽ¨Òé²»ÒªÔÚ»º´æÖд洢×ÖÃæÉϵÄNone£¬ÒòΪÄã²»ÄÜÇø±ðÄã´æ´¢µÄNoneÖµºÍͨ¹ý·µ»ØNoneÖµ±íʾµÄ»º´æÈ±Ê§
cache.get()¿ÉÒÔʹÓÃÒ»¸ödefault²ÎÊý£¬ËüÖ¸¶¨ÁËÈç¹û¶ÔÏóÔÚ»º´æÖв»´æÔÚʱµÄ·µ»ØÖµ:
Java´úÂë ¸´ÖÆ´úÂë
  1. >>> cache.get('my_key''has expired')   
  2. 'has expired'  

ʹÓÃcache.get_many()À´Ò»´Î»ñµÃ¶à¸ö»º´æÖµ£¬¶ÔÓÚ¸ø¶¨µÄ»º´æºó¶Ë£¬Èç¹û¿ÉÄÜ£¬get_many()½«Ö»·ÃÎÊ»º´æÒ»´Î£¬¶ø²»ÊǶÔ
ÿ¸ö»º´æ¼ü·ÃÎÊÒ»´Î£¬get_many()·µ»ØÒ»¸ö°üº¬ËùÓÐÄãÇëÇóµÄÔÚ»º´æÖдæÔÚ²¢Ã»ÓйýÆÚµÄ¼üµÄ×Öµä:
Java´úÂë ¸´ÖÆ´úÂë
  1. >>> cache.set('a'1)   
  2. >>> cache.set('b'2)   
  3. >>> cache.set('c'3)   
  4. >>> cache.get_many(['a''b''c'])   
  5. {'a'1'b'2'c'3}  

Èç¹û»º´æ¼ü²»´æÔÚ»òÕßÒѹýÆÚ£¬Ëü½«²»°üº¬ÔÚÕâ¸ö×ÖµäÖУ¬¼ÌÐøÀý×Ó:
Java´úÂë ¸´ÖÆ´úÂë
  1. >>> cache.get_many(['a''b''c''d'])   
  2. {'a'1'b'2'c'3}  

×îºó£¬Äã¿ÉÒÔÓÃcache.delete()ÏÔʾµÄɾ³ý¼ü£¬ÕâÊÇÇå³ý»º´æÖÐÌØÊâ¶ÔÏóµÄ¼òÒ×·½Ê½:
Java´úÂë ¸´ÖÆ´úÂë
  1. >>> cache.delete('a')  

cache.delete()ûÓзµ»ØÖµ£¬²¢ÇÒËüͬ¸ø¶¨»º´æ¼üºÍ¶ÔÓ¦Öµ´æÔÚÓë·ñµÄ¹¤×÷·½Ê½Ò»Ñù

ÉÏÓλº´æ
µ½Ä¿Ç°ÎªÖ¹£¬±¾Õ¼¯ÖйØ×¢»º´æÄã×Ô¼ºµÄÊý¾Ý£¬µ«ÊÇÁíÒ»ÖÖÀàÐ͵Ļº´æÒ²ºÍWeb¿ª·¢Ïà¹Ø:ͨ¹ý"ÉÏÓÎ"»º´æÀ´Ö´Ðлº´æ£¬ÕâЩ
»º´æÊÇÔÚÇëÇóµ½´ïÄãµÄWebÕ¾µã֮ǰΪÓû§»º´æÒ³ÃæµÄϵͳ
ÕâÀïÊÇһЩÉÏÓλº´æµÄÀý×Ó:
1£¬ÄãµÄISP¿ÉÄÜ»ºÄ³Ð©Ò³Ã棬ËùÒÔÈç¹ûÄãÇëÇóexample.comµÄÒ»¸öÒ³Ãæ£¬ÄãµÄISP½«²»Ö±½Ó·ÃÎÊexample.com¶ø·¢Ë͸øÄãÄǸö
Ò³Ãæ£¬example.comµÄά»¤Õß²»ÖªµÀÕâ¸ö»º´æ£¬ISPλÓÚexample.comºÍÄãµÄWebä¯ÀÀÆ÷Ö®¼ä͸Ã÷µÄ´¦ÀíËùÓеĻº´æ
2£¬ÄãµÄDjangoÍøÕ¾¿ÉÄÜÔÚÒ»¸ö´úÀí»º´æºóÃæ£¬ÀýÈçSquid(http://www.squid-cache.org)£¬ËüΪÐÔÄܶø»º´æÒ³Ãæ
ÕâÖÖÇé¿öÏ£¬Ã¿¸öÇëÇóÊ×Ïȱ»´úÀí´¦Àí£¬È»ºóÈç¹ûÐèÒªµÄ»°²Å±»·¢Ë͵½ÄãµÄ³ÌÐò
3£¬ÄãµÄWebä¯ÀÀÆ÷Ò²»º´æÒ³Ã棬Èç¹ûÒ»¸öWebÒ³Ãæ·¢ËÍÊʵ±µÄÍ·²¿£¬ÄãµÄä¯ÀÀÆ÷½«ÎªºóÃæ¶Ô¸ÃÒ³ÃæµÄÇëÇóʹÓñ¾µØ»º´æ¿½±´
¶ø²»ÊÇÔÙÒ»´ÎÁ¬½ÓÍøÒ³À´¿´ËüÊÇ·ñ¸ü¸Ä
ÉÏÓλº´æÊǺܺõĹ¦Ð§Íƽø£¬µ«ÊÇËüÓÐÒ»¸öΣÏÕ£¬Ðí¶àÍøÒ³µÄÄÚÈÝ»ùÓÚÈÏÖ¤ºÍһЩÆäËü±äÁ¿¶ø²»Í¬£¬²¢ÇÒÍêÈ«»ùÓÚURLÀ´Ã¤Ä¿
µÄ±£´æÒ³ÃæµÄ»º´æÏµÍ³¿ÉÄܱ©Â¶²»ÕýÈ·µÄ»òÕßÃô¸ÐÊý¾Ý¸øºóÃæ·ÃÎÊÄÇÐ©Ò³ÃæµÄ·ÃÎÊÕß
ÀýÈ磬Äã²Ù×÷Ò»¸öWeb e-mailϵͳ£¬"ÊÕ¼þÏä"Ò³ÃæµÄÄÚÈÝÏÔÈ»ÒÀÀµÓڵǼµÄÓû§£¬Èç¹ûISPäĿµÄ»º´æÄãµÄÕ¾µã£¬ÔòµÚÒ»¸ö
ͨ¹ýISPµÇ¼µÄÓû§½«»áʹËûµÄÓû§×¨ÓеÄÊÕ¼þÏäÒ³Ãæ»º´æ¸øºóÃæ·ÃÎʸÃÕ¾µãµÄ·ÃÎÊÕߣ¬Õâ²»cool
ÐÒÔ˵ÄÊÇ£¬HTTPÌṩÁ˸ÃÎÊÌâµÄ½â¾ö·½°¸£¬´æÔÚһЩHTTPÍ·²¿À´¸æÖªÉÏÓλº´æ¸ù¾ÝÖ¸ÅɵıäÁ¿ÏÔʾ²»Í¬µÄ»º´æÄÚÈÝ£¬ÒÔ¼°¸æ
Ëß»º´æ»úÖÆ²»Òª»º´æÌØÊâµÄÒ³Ãæ

ʹÓÃVaryÍ·²¿
ÕâЩͷ²¿ÖеÄÒ»¸öΪVary£¬Ëü¶¨ÒåÁ˵±»º´æ»úÖÆ¹¹½¨ËüµÄ»º´æ¼üʱӦ¸Ã¿¼ÂÇÄĸöÇëÇóÍ·²¿£¬ÀýÈ磬Èç¹ûÒ»¸öÍøÒ³µÄÄÚÈÝÒÀÀµ
ÓÚÓû§µÄÓïÑÔÑ¡Ôñ£¬ÔòÕâ¸öÒ³Ãæ³ÆÎª"¸ù¾ÝÓïÑÔ¶ø²»Í¬"
DjangoµÄ»º´æÏµÍ³Ä¬ÈÏʹÓÃÇëÇó·¾¶À´´´½¨ËüµÄ»º´æ¼ü£¬ÀýÈç"/stories/2005/jun/23/bank_robbed/"£¬ÕâÒâζ×ŶԸÃURLµÄ
ÿ¸öÇëÇó½«Ê¹ÓÃͬÑùµÄ»º´æ°æ±¾£¬²»¹Üuser-agentÊÇ·ñ²»Í¬£¬Èçcookies»òÕßÓïÑÔÑ¡ÔñµÈµÈ£¬¾¡¹ÜÈç´Ë£¬Èç¹ûÒ³Ãæ¸ù¾ÝÇëÇó
Í·²¿µÄһЩ²»Í¬À´Êä³ö²»Í¬µÄÄÚÈÝ--Èçcookie£¬ÓïÑÔ£¬»òuser-agent--Ä㽫ÐèҪʹÓÃVaryÍ·²¿À´¸æËß»º´æ»úÖÆÒ³ÃæÊä³öÒÀÀµ
ÓÚÄÇЩ¶«Î÷£¬ÏñÕâÑùʹÓ÷½±ãµÄvary_on_headersÊÓͼװÊÎÆ÷À´ÔÚDjangoÖÐ×öÕâ¸ö:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.views.decorators.vary import vary_on_headers   
  2.   
  3. # Python 2.3 syntax.   
  4. def my_view(request):   
  5.     # ...   
  6. my_view = vary_on_headers(my_view, 'User-Agent')   
  7.   
  8. # Python 2.4+ decorator syntax.   
  9. @vary_on_headers('User-Agent')   
  10. def my_view(request):   
  11.     # ...  

ÕâÖÖÇé¿öÏ£¬»º´æ»úÖÆ(ÀýÈçDjango×Ô¼ºµÄ»º´æÖмä¼þ)½«¶Ôÿ¸öΨһµÄuser-agent»º´æµ¥¶À°æ±¾µÄÒ³Ãæ
ʹÓÃvary_on_headers×°ÊÎÆ÷¶ø²»ÊÇÊÖ¶¯ÉèÖÃVaryÍ·²¿(ʹÓÃÀàËÆÓÚresponse['Vary'] = 'user-agent')µÄÓÅÊÆÊÇ×°ÊÎÆ÷Ìí¼Ó
µ½VaryÍ·²¿(¿ÉÄÜÒѾ­´æÔÚ)¶ø²»ÊÇ´ÓÁ㿪ʼÉèÖÃËü²¢Ç±Ôڵĸ²¸ÇÒѾ­ÔÚÄÇÀïµÄ¶«Î÷
Äã¿ÉÒÔ´«µÝ¶à¸öÍ·²¿µ½vary_on_headers():
Java´úÂë ¸´ÖÆ´úÂë
  1. @vary_on_headers('User-Agent''Cookie')   
  2. def my_view(request):   
  3.     # ...  

Õâ¸æËßÉÏÓλº´æ¶ÔÁ½Õß¶ø²»Í¬£¬¼´¶Ôÿ¸öuser-agentºÍcookieµÄ½áºÏµÃµ½Ëü×Ô¼ºµÄ»º´æÖµ£¬ÀýÈ磬ʹÓÃuser-agentΪMozilla
ºÍcookieÖµfoo=barµÄÇëÇ󽫱»ÈÏΪºÍuser-agentΪMozillaºÍcookieÖµfoo=hamµÄÇëÇó²»Í¬
ÒòΪ¶Ôcookie¶ø²»Í¬ÊÇÈç´Ë³£¼ûµÄÇéÐΣ¬ÓÐÒ»¸övary_on_cookie×°ÊÎÆ÷£¬ÕâÁ½¸öÊÓͼÊÇÏàµÈµÄ:
Java´úÂë ¸´ÖÆ´úÂë
  1. @vary_on_cookie  
  2. def my_view(request):   
  3.     # ...   
  4.   
  5. @vary_on_headers('Cookie')   
  6. def my_view(request):   
  7.     # ...  

Äã´«µÝ¸øvary_on_headersµÄÍ·²¿ÊÇ´óСд²»Ãô¸ÐµÄ£¬"User-Agent"ºÍ"user-agent"Ò»Ñù
ÄãÒ²¿ÉÒÔÖ±½ÓʹÓø¨Öú·½·¨django.utils.cache.patch_vary_headers£¬Õâ¸ö·½·¨ÉèÖûòÌí¼Óµ½VaryÍ·²¿£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.utils.cache import patch_vary_headers   
  2.   
  3. def my_view(request):   
  4.     # ...   
  5.     response = render_to_response('template_name', context)   
  6.     patch_vary_headers(response, ['Cookie'])   
  7.     return response  

patch_vary_headersʹÓÃHttpResponseʵÀý×÷ΪËüµÄµÚÒ»¸ö²ÎÊý£¬Ò»¸ö´óСд²»Ãô¸ÐµÄÍ·²¿ÃûµÄÁбí/Ôª×é×÷ΪËüµÄµÚ¶þ¸ö
²ÎÊý

¿ØÖÆ»º´æ:ʹÓÃÆäËüÍ·²¿
ÁíÒ»¸ö»º´æµÄÎÊÌâÊÇÊý¾ÝµÄ˽ÓÐÐÔºÍÊý¾ÝÓ¦¸Ã´æ´¢ÔÚ¼¶Áª»º´æµÄʲôλÖã¬Óû§Í¨³£Ãæ¶ÔÁ½ÖÖÀàÐ͵Ļº´æ:Ëü×Ô¼ºµÄä¯ÀÀÆ÷
»º´æ(˽Óлº´æ)ºÍËûµÄÌṩÕߵĻº´æ(¹«ÖÚ»º´æ)£¬¹«ÖÚ»º´æ±»¶à¸öÓû§Ê¹Óò¢ÇÒ±»ÆäËüµÄһЩÈË¿ØÖÆ£¬Õâ²úÉúÁËÃô¸ÐÊý¾ÝµÄ
ÎÊÌâ:Äã²»ÏëÈÃÄãµÄÒøÐÐÕʺŴ洢ÔÚ¹«ÖÚ»º´æÖУ¬ËùÒÔWeb³ÌÐòÐèÒªÒ»ÖÖ¸æËß»º´æÄÇЩÊý¾ÝÊÇ˽ÓкÍÄÇЩÊý¾ÝÊǹ«Öڵķ½Ê½
½â¾ö·½°¸ÊÇÖ¸³öÒ»¸öÒ³ÃæµÄ»º´æÓ¦¸ÃΪ"˽ÓÐ"£¬Ê¹ÓÃcache_controlÊÓͼװÊÎÆ÷À´ÔÚDjangoÖÐ×öÕâ¼þÊ£¬ÀýÈç:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.views.decorators.cache import cache_control   
  2.   
  3. @cache_control(private=True)   
  4. def my_view(request):   
  5.     # ...  

Õâ¸ö×°ÊÎÆ÷ÔÚÄ»ºó´¦Àí·¢ËÍÊʵ±µÄHTTPÍ·²¿
ÓÐһЩÆäËü¿ØÖÆ»º´æ²ÎÊýµÄ·½Ê½£¬ÀýÈ磬HTTPÔÊÐí³ÌÐò×öÏÂÃæµÄÊÂÇé:
1£¬¶¨ÒåÒ»¸öÒ³Ãæ»º´æµÄ×î´óʱ¼ä
2£¬Ö¸¶¨Ò»¸ö»º´æÊÇ·ñÓ¦¸ÃÒ»Ö±¼ì²éеİ汾£¬Ö»ÓÐÔÚÄÚÈÝûÓиü¸Äʱ·¢ËÍ»º´æ(һЩ»º´æ¿ÉÄܼ´Ê¹·þÎñÆ÷Ò³Ãæ¸ü¸ÄÁËÒ²·¢ËÍ
»º´æÄÚÈÝ--¼òµ¥µÄÒòΪ»º´æ¿½±´Ã»ÓйýÆÚ)
ÔÚDjangoÖÐʹÓÃcache_controlÊÓͼװÊÎÆ÷À´Ö¸¶¨ÕâЩ»º´æ²ÎÊý£¬Õâ¸öÀý×ÓÖУ¬cache_control¸æËß»º´æ¶Ôÿ´Î·ÃÎʶ¼ÖØÐÂÑé
Ö¤»º´æ²¢×î¶à´æ´¢»º´æ°æ±¾3600Ãë:
Java´úÂë ¸´ÖÆ´úÂë
  1. from django.views.decorators.cache import cache_control   
  2. @cache_control(must_revalidate=True, max_age=3600)   
  3. def my_view(request):   
  4.     ...  

һЩºÏ·¨µÄCache-Control HTTPָʾÔÚcache_control()ÖÐÊǺϷ¨µÄ£¬ÕâÀïÊÇÍêÕûµÄÁбí:
1£¬public=True
2£¬private=True
3£¬no_cache=True
4£¬no_transform=True
5£¬must_revalidate=True
6£¬proxy_revalidate=True
7£¬max_age=num_seconds
8£¬s_maxage=num_seconds
²Î¿¼¹æ·¶http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9À´µÃµ½Cache-Control HTTPָʾ
µÄ½âÊÍ
(×¢Ò⣬»º´æÖмä¼þÒѾ­Í¨¹ýCACHE_MIDDLEWARE_SETTINGSÉèÖÃÀ´ÉèÖÃÁË»º´æÍ·²¿µÄmax-age£¬Èç¹ûÄãÔÚcache_control×°ÊÎÆ÷
ÖÐʹÓÃ×Ô¶¨ÒåµÄmax_age£¬×°ÊÎÆ÷½«ÓÅÏȲÉÓ㬶øÍ·²¿µÄÖµ»á±»ÕýÈ·µÄºÏ²¢)

ÆäËüÓÅ»¯
DjangoһЩÆäËü¿ÉÒÔ°ïÄãÓÅ»¯ÄãµÄappsÐÔÄܵÄÖмä¼þ:
1£¬django.middleware.http.ConditionalGetMiddlewareÌí¼Ó¶ÔÏÖ´úä¯ÀÀÆ÷µÄ»ùÓÚETagºÍLast-ModifiedÍ·²¿µÄÓÐÌõ¼þµÄGET
Ó¦´ðµÄÖ§³Ö
2£¬django.middleware.gzip.GZipMiddlewareΪËùÓÐÏÖ´úä¯ÀÀÆ÷ѹËõÓ¦´ðÀ´½ÚÊ¡´ø¿íºÍ´«Êäʱ¼ä

MIDDLEWARE_CLASSESµÄ˳Ðò
Èç¹ûÄãʹÓÃCacheMiddleware£¬°ÑËü·ÅÔÚMIDDLEWARE_CLASSESÉèÖõÄÕýȷλÖúÜÖØÒª£¬ÒòΪ»º´æÖмä¼þÐèÒªÖªµÀ¸Ä±ä»º´æ´æ´¢
µÄÍ·²¿£¬°ÑCacheMiddleware·ÅÔÚÈκοÉÄÜÌí¼Ó¶«Î÷µ½VaryÍ·²¿µÄÖмä¼þºóÃæ£¬°üÀ¨:
1£¬SessionMiddleware£¬ËüÌí¼ÓCookie
2£¬GZipMiddleware£¬ËüÌí¼ÓAccept-Encoding
°²»ÕлªµçÄÔѧУרҵְҵ¹æ»®Ê¦ÎªÄãÌṩ¸ü¶à°ïÖú¡¾ÔÚÏß×Éѯ¡¿
Ö÷Õ¾Ö©Öë³ØÄ£°å£º 日韩精品一区二区三区免费 | 91精品国产高潮抽搐 | 99久久婷婷国产综合精品免费 | 182tv成人福利视频免费看 | 91精品久久久久久蜜桃 | 免费看麻豆视频 | 91视色 | 亚洲天堂91 | 91精品婷婷国产综合久久蝌蚪 | 91视频免费看网站 | 被下了药糟蹋h文 | 国产午夜一级毛片 | 国产真实精品久久二三区 | 亚洲精品美女视频 | 综合久久中文字幕 | 嫩草九九九精品乱码一二三 | 久久久二区 | 亚洲美女视频一区二区 | 91视频污黄 | 999在线观看精品免费不卡网站 | 免费成人在线播放 | 午夜免费看毛片 | 国产精品精品久久久久久 | 国产亚洲三区 | 亚洲欧美韩国 | 免费看一区二区三区 | 91香蕉视频导航 | 亚洲精美视频 | 日本成人网址 | 亚洲四区 | 久久久亚洲国产天美传媒修理工 | 国产在线观看一区二区 | 91成人破解版 | 狠狠色丁香婷婷综合橹88 | 久热综合网 | 在线男人天堂网 | 99热精品国产 | 国产欧美精品区一区二区三区 | 久久久久久久久久久久久久久伊免 | 天干夜天干夜天天免费视频 | 九色视频精品 |