Õ¾µãÒ³ÃæµÄÁ÷Á¿Çé¿ö£¬Õ⵱Ȼ²»ÕýÈ·£¬·ÃÎÊÎÒÃÇÕ¾µãµÄä¯ÀÀÆ÷ºóÃæÊÇÕæÊµµÄÈË(ÖÁÉÙÓÐЩʱºòÊÇÕâÑù)£¬ÕâÊDZ»ºöÂÔµÄÒ»¸ö
´óÎÊÌâ:µ±Internet·þÎñÓÚÈ˶ø²»ÊÇ»úÆ÷ʱÊǹ¤×÷µÄ×îºÃµÄ£¬Èç¹ûÎÒÃÇ¿ª·¢ÕæÕýÒýÈËעĿµÄÕ¾µãʱ£¬×îÖÕÎÒÃǽ«²»µÃ²»Óë
ä¯ÀÀÆ÷ºóÃæµÄÈË´ò½»µÀ
²»ÐÒµÄÊÇ£¬Õâ²¢²»ÈÝÒ×£¬HTTP±»Éè¼ÆÎªÎÞ״̬£¬¼´Ã¿¸öÇëÇó·¢ÉúÔÚÒ»¸ö¿Õ¼äÀÁ½¸öÇëÇóÖ®¼äûÓг־û¯£¬²¢ÇÒÎÒÃDz»ÄÜ
¼ÆËãÒ»¸öÇëÇóµÄÿ¸ö·½Ãæ(IPµØÖ·£¬Óû§´úÀíµÈµÈ)À´Ò»ÖµÄÏÔʾͬһ¸öÈ˵ÄÁ¬ÐøÇëÇó
ä¯ÀÀÆ÷¿ª·¢ÈËÔ±ºÜ¾Ã֮ǰ¾ÍÒâʶµ½HTTPµÄÎÞ״̬µ¼ÖÂÁËweb¿ª·¢ÈËÔ±ºÜ´óµÄÂé·³£¬¾ÍÕâÑùcookiesµ®ÉúÁË
cookieÊÇÒ»¸öСÐÅϢƬ¶Î£¬ä¯ÀÀÆ÷´æ´¢ËüÀ´´ú±íweb·þÎñÆ÷£¬Ã¿´Îä¯ÀÀÆ÷´Óijһ·þÎñÆ÷ÇëÇóÒ»¸öÒ³ÃæÊ±¶¼»á°ÑËüÆð³õ½ÓÊÜ
µÄcookie»Ø´«¹ýÈ¥
Cookies
ÈÃÎÒÃÇ¿´¿´Ëü¿ÉÄÜÔõÑù¹¤×÷£¬µ±Ä㿪Æôä¯ÀÀÆ÷²¢¼üÈëgoogle.com£¬ÄãµÄä¯ÀÀÆ÷ÏñÕâÑù¿ªÊ¼À´·¢ËÍÒ»¸öHTTPÇëÇóµ½Google:
GET / HTTP/1.1
Host: google.com
...
µ±Google»Ø¸´Ê±£¬HTTPÓ¦´ð¿´ÆðÀ´ÏñÕâÑù:
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
expires=Sun, 17-Jan-2038 19:14:07 GMT;
path=/; domain=.google.com
Server: GWS/2.1
×¢ÒâSet-CookieÍ·²¿£¬ÄãµÄä¯ÀÀÆ÷½«´æ´¢Õâ¸öcookieÖµ(PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671)²¢ÔÚ
ÿ´ÎÄã·ÃÎÊÕâ¸öÕ¾µãʱ»Ø´«¸øGoogle£¬ËùÒÔÏÂÒ»´ÎÄã·ÃÎÊGoogleʱÄãµÄä¯ÀÀÆ÷½«´«µÝÏñÕâÑùµÄÇëÇó:
GET / HTTP/1.1
Host: google.com
Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671
...
È»ºóGoogle¿ÉÒÔʹÓÃÕâ¸öCookieÖµÀ´ÖªµÀÄãÊÇÔçЩʱºò·ÃÎÊÕâ¸öÕ¾µãµÄͬһ¸öÈË
ÀýÈ磬Õâ¸öÖµ¿ÉÄÜÊÇÊý¾Ý¿â´æ´¢Óû§ÐÅÏ¢µÄ¼ü£¬Google¿ÉÒÔ(Ҳȷʵ)ʹÓÃËüÀ´ÔÚÒ³ÃæÉÏÏÔʾÄãµÄÃû×Ö
µÃµ½ºÍÉèÖÃcookies
µ±ÔÚDjangoÖд¦Àí³Ö¾Ã»¯Ê±£¬´ó²¿·ÖʱºòÄãÏëʹÓÃÉÔºóÌÖÂ۵ĸ߼¶sessionºÍ/»òÓû§¿ò¼Ü£¬¾¡¹ÜÈç´Ë£¬ÎÒÃǽ«Í£ÏÂÀ´ÏÈ
¿´¿´ÔÚDjangoÖÐÔõÑù¶ÁºÍдcookies£¬Ëü½«°ïÖúÄãÀí½â±¾ÕÂÆäËü²¿·ÖÊÂʵÉÏÔõÑù¹¤×÷£¬²¢ÇÒÈç¹ûÄãÐèÒªÖ±½Ó²Ù×÷cookies
µÄ»°Ëü½«´¥ÊֿɵÃ
¶ÁÈ¡ÒѾÉèÖõÄcookiesÊǷdz£¼òµ¥µÄ:ÿ¸örequest¶ÔÏó¶¼ÓÐÒ»¸öÀàËÆ×ÖµäµÄCOOKIES¶ÔÏó£¬Äã¿ÉÒÔʹÓÃËüÀ´¶Áä¯ÀÀÆ÷·¢ËÍ
µ½ÊÓͼµÄÈκÎcookies:
- def show_color(request):
- if "favorite_color" in request.COOKIES:
- return HttpResponse("Your favorite color is %s" % \
- request.COOKIES["favorite_color"])
- else:
- return HttpResponse("You don't have a favorite color.")
дcookies¸ü¸´ÔÓÒ»µã£¬ÄãÐèҪʹÓÃHttpResponse¶ÔÏóµÄset_cookie()·½·¨£¬ÕâÀïÊÇÒ»¸ö»ùÓÚGET²ÎÊýÉèÖÃfavorite_color
cookieµÄÀý×Ó:
- def set_color(request):
- if "favorite_color" in request.GET:
- # Create an HttpResponse object...
- response = HttpResponse("Your favorite color is now %s" % \
- request.GET["favorite_color"])
- # ... and set a cookie on the response
- response.set_cookie("favorite_color",
- request.GET["favorite_color"])
- else:
- return HttpResponse("You didn't give a favorite color.")
ÄãÒ²¿ÉÒÔ´«µÝһЩ¿ÉÑ¡²ÎÊýµ½request.set_cookie()À´¿ØÖÆcookieµÄһЩ·½Ãæ:
Parameter Default Description
max_age None cookie³ÖÐøµÄʱ¼ä(Ãë)£¬Èç¹ûΪNone£¬cookie½«Ö»³ÖÐøµ½ä¯ÀÀÆ÷¹Ø±Õ
expires None cookie¹ýÆÚµÄ׼ȷÈÕÆÚ/ʱ¼ä£¬¸ñʽӦΪ"Wdy, DD-Mth-YY HH:MM:SS GMT"
Èç¹û¸ø¶¨Öµ£¬Ëü½«¸²¸Çmax_age²ÎÊý
path "/" cookieµÄºÏ·¨µÄ·¾¶Ç°×º£¬ä¯ÀÀÆ÷½«Ö»°Ñcookie´«µÝ»Ø¸Ã·¾¶Ç°×ºÏ£¬ËùÒÔÄã¿ÉÒÔ
ʹÓÃËüÀ´·ÀÖ¹cookies±»´«µÝ¸øÄãµÄÕ¾µãµÄÆäËü²¿·Ö£¬µ±Äã²»¿ØÖÆÄãµÄÕ¾µãÓòÃûµÄ
¶¥¼¶²¿·ÖʱÕâ·Ç³£ÓÐÓÃ
domain None cookieµÄºÏ·¨ÓòÃû£¬Äã¿ÉÒÔʹÓÃËüÀ´ÉèÖÿçÓòÃûµÄcookie£¬ÀýÈ磬domain=".examp
le.com"½«ÉèÖÃÒ»¸ö¿ÉÒÔ±»www.example.com£¬www2.example.comºÍan.other.sub.
domain.example.com¶ÁÈ¡µÄcookie
Èç¹ûÉèÖÃΪNone£¬cookie½«Ö»Äܱ»ÉèÖÃËüµÄÓòÃû¶ÁÈ¡
secure False Èç¹ûÉèÖÃΪTrue£¬Ëü½«Ö¸Ê¾ä¯ÀÀÆ÷Ö»µ±Í¨¹ýHTTPS·ÃÎÊÒ³ÃæÊ±·µ»ØÕâ¸öcookie
cookiesµÄ»ìºÏ×£¸£
Äã¿ÉÄÜ×¢Òâµ½cookies¹¤×÷µÄһЩDZÔÚµÄÎÊÌ⣬ÈÃÎÒÃÇ¿´¿´Ò»Ð©ÖØÒªµÄ:
1£¬Cookies±¾ÖÊÉÏÊÇ×Ô·¢µÄ£¬ä¯ÀÀÆ÷²»±£Ö¤cookiesµÄ´æ´¢£¬ÊÂʵÉÏ£¬Õâ¸öÐÐÐÇÉϵÄÿ¸öä¯ÀÀÆ÷¶¼ÈÃÄã¿ØÖÆÄãµÄä¯ÀÀÆ÷µÄ
½ÓÊÜcookiesµÄ²ßÂÔ£¬Èç¹ûÄãÏë¿´ÖØÒªµÄcookiesÔõÑùµ½´ïweb£¬³¢ÊÔ´ò¿ªä¯ÀÀÆ÷µÄ"½ÓÊÜÿ¸öcookie"Ñ¡ÏÉõÖÁÒ»¸ö¾Þ´ó
µÄÀ¶É«¹ÖÎï¶¼½«Ìî³äËùÓÐÕâЩcookies!
µ±È»£¬ÕâÒâζ×ÅcookiesÉϲ»¿ÉÐÅÈε͍Ò壬¿ª·¢ÈËÔ±Ó¦¸Ã¼ì²éÓû§ÔÚÐÅÀµËüÃÇ֮ǰ½ÓÊÜÁËcookies
¸üÖØÒªµÄÊÇ£¬ÄãÓ¦¸Ã´Ó²»ÔÚcookiesÀïÃæ´æ´¢ÖØÒªÊý¾Ý£¬web³äÂúÁË¿ª·¢ÈËԱΪÁËijЩÔÒòÔÚä¯ÀÀÆ÷cookiesÀï´æ´¢²»¿ÉÖØ
»ñµÄÐÅÏ¢À´Ê¹ä¯ÀÀÆ÷·½±ãµÄ¿Ö²À¹ÊÊÂ
2£¬Cookies²»Êǰ²È«µÄ£¬ÒòΪHTTPÊý¾Ý´«ÊäµÄÊÇÃ÷ÎÄ£¬cookies·Ç³£ÈÝÒ×ÊÜÇÔÌý¹¥»÷£¬¼´¹¥»÷ÕßÔÚÏßÉÏÇÔÌý¿ÉÒÔ½ØÈ¡
cookie²¢¶ÁÈ¡Ëü£¬ÕâÒâζ×ÅÄãÓ¦¸Ã´Ó²»ÔÚcookieÀï´æ´¢Ãô¸ÐÐÅÏ¢
»¹ÓиüÒõÏÕµÄ"ÖмäÈË"¹¥»÷£¬ÆäÖÐÒ»¸ö¹¥»÷Õß½ØÈ¡cookie²¢Ê¹ÓÃËüÀ´¼ÙװΪÁíÒ»¸öÓû§£¬µÚ20ÕÂÉîÈëÌÖÂÛÁËÕâÖÖ¹¥»÷ÏÖÏó
²¢¸ø³öÁËÔ¤·ÀµÄ°ì·¨
3£¬CookiesÉõÖÁ¶ÔÔ¤¶¨µÄ½ÓÊÜÕß¶¼²»°²È«£¬´ó¶àÊýä¯ÀÀÆ÷Ìṩ¼òÒ×·½Ê½À´±à¼µ¥¶ÀcookiesµÄÄÚÈÝ£¬²¢ÇÒ×ãÖǶàıµÄÓû§
¿ÉÒÔʹÓÃÏñmechanizeµÄ¹¤¾ßÀ´ÊÖ¶¯¹¹½¨HTTPÇëÇó
ËùÒÔÄã²»ÄÜÔÚcookiesÀï´æ´¢¿É´Ü¸ÄµÄÃô¸ÐÊý¾Ý£¬ÕâÖÖÇéÐÎϵıê×¼´íÎóÊǵ±Óû§µÇ¼ºóÔÚcookieÀï´æ´¢ÏñIsLoggedIn=1
µÄ¶«Î÷£¬Äã»á¶Ô´óÁ¿µÄÕ¾µã·¸ÕâÖÖ´íÎó¶ø¸Ðµ½¾ªÆæ£¬Ö»Ð軨һÃëÖӾͿÉÒÔÓÞŪÕâЩվµãµÄ"°²È«"ϵͳ
DjangoµÄsession¿ò¼Ü
ÓÉÓÚÕâЩÏÞÖÆºÍDZÔڵݲȫ©¶´£¬ºÜÏÔÈ»cookiesºÍ³Ö¾Ã»¯sessionsÊÇÁíÒ»¸öweb¿ª·¢ÀïÍ·Ì۵ĵط½£¬µ±È»DjangoµÄÄ¿±êÊÇ
×ö¸ßЧµÄÍ·ÌÛɱÊÖ£¬ËùÒÔDjango´øÀ´Ò»¸öΪÄãɨƽÕâЩÀ§ÄѵÄsession¿ò¼Ü
Õâ¸ösession¿ò¼ÜÈÃÄã»ùÓÚÒ»¸öÕ¾µã·ÃÎÊÕß´æ´¢ºÍµÃµ½ÈÎÒâÊý¾Ý£¬ËüÔÚ·þÎñÆ÷¶Ë´æ´¢Êý¾Ý²¢³éÏó·¢ËͺͽÓÊÜcookies
CookiesֻʹÓÃÒ»¸ö¹þÏ£session ID¶ø²»ÊÇÊý¾Ý±¾Éí£¬ÕâÑù¿ÉÒÔ·ÀÖ¹´ó²¿·Öͨ³£µÄcookieÎÊÌâ
ÔÊÐísessions
Sessionsͨ¹ýÒ»¸öÖмä¼þ(²Î¿¼µÚ16ÕÂ)ºÍÒ»¸öDjangoÄ£ÐÍʵÏÖ£¬ÄãÐèÒª×öÈçÏÂÊÂÇéÀ´ÔÊÐísessions:
1£¬±à¼ÄãµÄMIDDLEWARE_CLASSESÉèÖò¢È·ÈÏMIDDLEWARE_CLASSES°üº¬'django.contrib.sessions.middleware.Session
Middleware'
2£¬È·ÈÏ'django.contrib.sessions'ÔÚÄãµÄINSTALLED_APPSÉèÖÃÀï(Èç¹ûÄãÐèÒªÌí¼ÓËü»¹ÒªÔÊÐímanage.py syncdb)
ͨ¹ýstartproject´´½¨µÄĬÈϹǼÜÉèÖÃÒѾ°²×°ÁËÕâÁ½ÏËùÒÔ³ý·ÇÄãÒѾɾ³ýÁËËüÃÇ£¬ÄãºÜ¿ÉÄܲ»ÐèÒª¸Ä±äÈκζ«Î÷
¾Í¿ÉÒÔÈÃsessions¹¤×÷
Èç¹ûÄã²»ÏëʹÓÃsessions£¬Äã¿ÉÄÜÏë´ÓMIDDLEWARE_CLASSESɾ³ýSessionMiddlewareÐкʹÓINSTALLED_APPSɾ³ý
'django.contrib.sessions'£¬Ëü½«Ö»±£´æÒ»¸öºÜСµÄ¹ý¶È£¬µ«ÊÇÕâºÜСµÄ²¿·ÖÆð×÷ÓÃ
ÔÚÊÓͼÀïʹÓÃsessions
µ±SessionMiddleware¼¤»îºó£¬Ã¿¸öHttpRequest¶ÔÏó--ÿ¸öDjangoÊÓͼ·½·¨µÄµÚÒ»¸ö²ÎÊý--½«ÓÐÒ»¸ösessionÊôÐÔ£¬ËüÊÇ
Ò»¸öÀàËÆ×ÖµäµÄ¶ÔÏó£¬Äã¿ÉÒÔÏñʹÓÃÆÕͨµÄ×ÖµäÒ»Ñù¶ÁдËü£¬ÀýÈ磬Äã¿ÉÒÔÔÚÊÓͼÖÐ×öÕâÑùµÄÊÂÇé:
- # Set a session value:
- request.session["fav_color"] = "blue"
- # Get a session value -- this could be called in a different view,
- # or many requests later (or both):
- fav_color = request.session["fav_color"]
- # Clear an item from the session:
- del request.session["fav_color"]
- # Check if the session has a given key:
- if "fav_color" in request.session:
- ...
ÄãÒ²¿ÉÒÔÔÚrequest.sessionʹÓÃÏñkeys()ºÍitems()µÄÆäËüÓ³Éä·½·¨
ÓÐһЩ¸ßЧʹÓÃDjangoµÄsessionsµÄ¼òµ¥¹æÔò:
1£¬ÔÚrequest.sessionʹÓÃÆÕͨµÄPython×Ö·û´®×÷Ϊ×ÖµäµÄ¼ü(¶ø²»ÊÇintegers£¬objectsµÈµÈ)£¬ÕâÊÇÒ»¸ö¹ßÀý£¬µ«ÊÇÖµ
µÃ×ñÑ
2£¬ÒÔÏ»®Ïß¿ªÊ¼µÄsession×Öµä¼ü±»Django±£Áô×÷ÄÚ²¿Ê¹Óã¬Êµ¼ùÖпò¼ÜֻʹÓ÷dz£ÉÙµÄÏ»®Ïßǰ׺µÄsession±äÁ¿£¬µ«
Êdzý·ÇÄãÖªµÀËüÃǶ¼ÊÇЩʲô(²¢ÇÒÏë¸úÉÏDjango±¾ÉíµÄ¸ü¸Ä)£¬×îºÃÔ¶ÀëËüÃÇÒÔ·ÀDjango·Á°ÄãµÄapp
3£¬²»ÒªÓÃеĶÔÏ󸲸Çrequest.session£¬²¢ÇÒ²»Òª·ÃÎÊ»òÕßÉèÖÃËüµÄÊôÐÔ£¬ÏñPython×ÖµäÒ»ÑùʹÓÃËü
ÈÃÎÒÃÇ¿´¿´Ò»Ð©¿ìËÙµÄÀý×Ó£¬¼òµ¥µÄÊÓͼÔÚÓû§Ìá½»Ò»¸öcommentºóÉèÖÃÒ»¸öhas_commented±äÁ¿ÎªTrue£¬Ëü²»ÈÃÒ»¸öÓû§
Ìá½»Ò»¸öcomment¶àÓÚÒ»´Î:
- def post_comment(request, new_comment):
- if request.session.get('has_commented', False):
- return HttpResponse("You've already commented.")
- c = comments.Comment(comment=new_comment)
- c.save()
- request.session['has_commented'] = True
- return HttpResponse('Thanks for your comment!')
¼òµ¥µÄÊÓͼÔÚÕ¾µãµÇ¼һ¸ö"³ÉÔ±":
- def login(request):
- m = members.get_object(username__exact=request.POST['username'])
- if m.password == request.POST['password']:
- request.session['member_id'] = m.id
- return HttpResponse("You're logged in.")
- else:
- return HttpResponse("Your username and password didn't match.")
Õâ¸öÀý×Ó¸ù¾ÝÉÏÃæµÄlogin()×¢ÏúÒ»¸ö³ÉÔ±:
- def logout(request):
- try:
- del request.session['member_id']
- except KeyError:
- pass
- return HttpResponse("You're logged out.")
×¢Ò⣬ʵ¼ùÖÐÕâÊǵǼÓû§µÄ¶ñÐĵķ½Ê½£¬ÏÂÃæÌÖÂÛµÄÈÏÖ¤¿ò¼ÜÒÔ¸ü½¡×³ºÍÓÐÓõķ½Ê½ÎªÄã´¦ÀíÕâЩ£¬ÕâЩÄÚÈÝÖ»ÊÇÌṩ
ÈÝÒ×Àí½âµÄÀý×Ó
ÉèÖòâÊÔcookies
ÉÏÃæÌáµ½£¬Äã²»ÄÜÒÀÀµÃ¿¸öä¯ÀÀÆ÷½ÓÊÜcookies£¬ËùÒÔ£¬ÎªÁË·½±ãÆð¼û£¬DjangoÌṩÁËÒ»¸ö¼òµ¥µÄ·½Ê½À´²âÊÔÓû§µÄä¯ÀÀÆ÷
ÊÇ·ñ½ÓÊÜcookies£¬ÄãÖ»ÐèÔÚÊÓͼÖе÷ÓÃrequest.session.set_test_cookie()²¢ÔÚºóÃæµÄÊÓͼÖмì²érequet.session.test
_cookie_worked()£¬¶ø²»ÊÇÔÚͬһ¸öÊÓͼÖе÷ÓÃ
ÓÉÓÚcookiesµÄ¹¤×÷·½Ê½£¬ÕâÑù±¿×¾µÄ·ÖÀëset_test_cookie()ºÍtest_cookie_worked()ºÜ±ØÒª£¬µ±ÄãÉèÖÃÒ»¸öcookie£¬Äã
ÊÂʵÉϲ»ÄÜ·Ö±æä¯ÀÀÆ÷ÊÇ·ñ½ÓÊÜËü£¬Ö±µ½ä¯ÀÀÆ÷ÏÂÒ»´ÎÇëÇó
Äã×Ô¼ºÊ¹ÓÃdelete_test_cookie()À´Çå³ý²âÊÔcookieÊÇÁ¼ºÃµÄʵ¼ù£¬ÔÚÄãÑéÖ¤²âÊÔcookie¹¤×÷ºó×öÕâ¼þÊÂ
ÕâÀïÊÇÒ»¸öµäÐ͵ÄʹÓÃÀý×Ó:
- def login(request):
- # If we submitted the form...
- if request.method == 'POST':
- # Check that the test cookie worked (we set it below):
- if request.session.test_cookie_worked():
- # The test cookie worked, so delete it.
- request.session.delete_test_cookie()
- # In practice, we'd need some logic to check username/password
- # here, but since this is an example...
- return HttpResponse("You're logged in.")
- # The test cookie failed, so display an error message. If this
- # was a real site we'd want to display a more friendly message.
- else:
- return HttpResponse("Please enable cookies and try again.")
- # If we didn't post, send the test cookie along with the login form.
- request.session.set_test_cookie()
- return render_to_response('foo/login_form.html')
×¢Ò⣬ÄÚ½¨µÄµÇ¼ºÍ×¢Ïú·½·¨ÎªÄã´¦ÀíÁËÕâЩ
ÔÚÊÓͼÍâʹÓÃsessions
ÄÚ²¿Ã¿¸ösessionÖ»ÊÇÔÚdjango.contrib.sessions.models¶¨ÒåµÄÆÕͨµÄDjangoÄ£ÐÍ£¬ÒòΪËüÊÇÒ»¸öÆÕͨģÐÍ£¬Äã¿ÉÒÔʹÓÃ
ÆÕͨµÄDjangoÊý¾Ý¿âAPI·ÃÎÊsessions:
- >>> from django.contrib.sessions.models import Session
- >>> s = Session.objects.get_object(pk='2b1189a188b44ad18c35e113ac6ceead')
- >>> s.expire_date
- datetime.datetime(2005, 8, 20, 13, 35, 12)
Ä㽫ÐèÒªµ÷ÓÃget_decoded()À´µÃµ½×¼È·µÄsessionÊý¾Ý£¬ÕâÊDZØÐèµÄ£¬ÒòΪ×ֵ䴿´¢ÎªÒ»¸ö±àÂëµÄ¸ñʽ:
- >>> s.session_data
- 'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
- >>> s.get_decoded()
- {'user_id': 42}
µ±sessions±£´æÊ±
µ±sessionÐ޸ĺóDjangoĬÈÏÖ»±£´æµ½sessionÊý¾Ý¿â£¬¼´µ±ËüµÄ×ÖµäÖµ±»¸³Öµ»òɾ³ýʱ:
- # Session is modified.
- request.session['foo'] = 'bar'
- # Session is modified.
- del request.session['foo']
- # Session is modified.
- request.session['foo'] = {}
- # Gotcha: Session is NOT modified, because this alters
- # request.session['foo'] instead of request.session.
- request.session['foo']['bar'] = 'baz'
ΪÁ˸ü¸ÄÕâ¸öĬÈϵÄÐÐΪ£¬ÐèÒªÉèÖÃSESSION_SAVE_EVERY_REQUESTÉèÖÃΪTrue£¬Èç¹ûSESSION_SAVE_EVERY_REQUESTΪTrue
Django½«ÔÚÿ¸öµ¥¶ÀµÄÇëÇó±£´æsessionµ½Êý¾Ý¿â£¬ÉèÖõ±ËüûÓиıäʱ
×¢ÒâÖ»Óе±session±»´´½¨»òÐÞ¸Äʱsession cookie²Å±»·¢ËÍ£¬Èç¹ûSESSION_SAVE_EVERY_REQUESTΪTrue£¬session
cookie½«¶Ôÿ´ÎÇëÇó·¢ËÍ
ͬÑù£¬session cookieµÄexpires²¿·ÖÔÚÿ´Îsession cookie·¢ËÍʱ¸üÐÂ
ä¯ÀÀÆ÷³¤¶ÈµÄsessionsÓë³Ö¾Ã»¯sessions
Äã¿ÉÄÜÒѾעÒâµ½Google·¢Ë͵Äcookie°üº¬expires=Sun, 17-Jan-2038 19:14:07 GMT; Cookies¿ÉÒÔ¿ÉÑ¡µÄ°üº¬Ò»¸ö¹ýÆÚ
ÈÕÆÚ£¬¸ÃÈÕÆÚ¸æËßä¯ÀÀÆ÷ʲôʱºòɾ³ýcookie£¬Èç¹ûÒ»¸öcookie²»°üº¬¹ýÆÚÖµ£¬ä¯ÀÀÆ÷½«ÔÚÓû§¹Ø±Õä¯ÀÀÆ÷´°¿Úʱ¹ýÆÚ
Äã¿ÉÒÔͨ¹ýSESSION_EXPIRE_AT_BROWSER_CLOSEÉèÖÃÀ´¿ØÖÆsession¿ò¼ÜÔÚÕâµãÉϵÄÐÐΪ
SESSION_EXPIRE_AT_BROWSER_CLOSEĬÈÏÉèÖÃΪFalse£¬ÕâÒâζ×Åsession cookies½«´æ´¢ÔÚÓû§µÄä¯ÀÀÆ÷ÖгÖÐø
SESSION_COOKIE_AGEÃë(ĬÈÏΪÁ½ÐÇÆÚ£¬¼´1209600Ãë)£¬Èç¹ûÄã²»ÏëÈËÃÇÿ´Î´ò¿ªä¯ÀÀÆ÷ʱ¶¼²»µÃ²»µÇ¼µÄ»°¿ÉÒÔʹÓÃËü
Èç¹ûSESSION_EXPIRE_AT_BROWSER_CLOSEÉèÖÃΪTrue£¬Django½«Ê¹ÓÃä¯ÀÀÆ÷³¤¶ÈµÄcookies
ÆäËüsessionÉèÖÃ
³ýÁËÒѾÌáµ½µÄÉèÖ㬻¹ÓÐһЩÆäËüÓ°ÏìDjangoµÄsession¿ò¼ÜʹÓÃcookiesµÄÉèÖÃ:
Setting Default Explanation
SESSION_COOKIE_DOMAIN None session cookiesʹÓõÄÓòÃû£¬ÉèÖÃËüΪһ¸ö×Ö·û´®£¬Èç".lawrence.com"
À´Ê¹ÓÿçÓòÃûµÄcookies£¬»òÕßÉèÖÃNoneÀ´Ê¹Óñê×¼cookie
SESSION_COOKIE_NAME "sessionid" ʹÓÃsessions µÄcookieÃû£¬¿ÉÒÔÊÇÈÎÒâ×Ö·û´®
SESSION_COOKIE_SECURE False session cookieÊÇ·ñʹÓÃ"°²È«"cookie£¬Èç¹ûÉèÖÃΪTrue£¬cookie½«±»
±ê¼ÇΪ"°²È«"£¬ÕâÒâζ×Åä¯ÀÀÆ÷½«±£Ö¤cookieֻͨ¹ýHTTPS´«ËÍ
¼¼Êõϸ½Ú
³öÓÚºÃÆæ£¬ÕâÀïÓÐһЩ¹ØÓÚsession¿ò¼ÜÄÚ²¿¹¤×÷µÄ¼¼Êõ×¢½â:
1£¬session×Öµä½ÓÊÜÈÎÒâpickleable Python¶ÔÏ󣬲ο¼PythonÄÚ½¨µÄpickleÄ£¿éÎĵµµÃµ½¸ü¶à¹ØÓÚÕâÔõÑù¹¤×÷µÄÐÅÏ¢
2£¬SessionÊý¾Ý´æ´¢ÔÚÃûΪdjango_sessionµÄÊý¾Ý¿â±íÖÐ
3£¬SessionÊý¾ÝÊÇ"lazily":Èç¹ûÄã´Ó²»·ÃÎÊrequest.session£¬Django²»»á½Ó´¥ÄǸöÊý¾Ý¿â±í
4£¬DjangoÖ»ÔÚÐèҪʱ´«ËÍcookie£¬Èç¹ûÄã²»ÉèÖÃÈκÎsessionÊý¾Ý£¬Ëü½«²»»á·¢ËÍsession cookie(³ý·ÇSESSION_SAVE_
EVERY_REQUESTÉèÖÃΪTrue)
5£¬DjangoµÄsessions¿ò¼ÜÊÇÍêÕûµÄ£¬µ¥¶ÀµÄºÍ»ùÓÚcookieµÄ£¬Ëü²»ÏñÆäËü¹¤¾ß(PHP£¬JSP)Ò»ÑùÇóÖîÓÚ°Ñsession IDs·ÅÔÚ
URLsÖÐ
Èç¹ûÄãÈÔÈ»ºÜºÃÆæ£¬Ô´´úÂëÊǷdz£Ö±½ÓµÄ£¬Äã¿ÉÒԲ鿴django.contrib.sessions
Óû§ºÍÈÏÖ¤
ÏÖÔÚÎÒÃǽ«ä¯ÀÀÆ÷ºÍÕæÊµµÄÈËÁ¬½ÓÆðÀ´ÒѾÍê³ÉÁËÒ»°ë£¬SessionsÌṩÎÒÃÇÔÚ¶àä¯ÀÀÆ÷ÇëÇóÖ®¼ä´æ´¢Êý¾ÝµÄÒ»ÖÖ·½Ê½£¬µÚ
¶þ¸öÒòËØÊÇʹÓÃÕâЩsessionsÀ´ÈÃÓû§µÇ¼£¬µ±È»£¬ÎÒÃDz»ÄÜÖ»ÐÅÈÎÓû§Ëù˵µÄËûÃÇÊÇË£¬ËùÒÔÎÒÃǽ«ÐèÒªÈÏÖ¤ËüÃÇ
×ÔÈ»£¬DjangoÌṩ¹¤¾ßÀ´´¦ÀíÕâ¸öͨ³£µÄÈÎÎñ(ÒÔ¼°Ðí¶àÆäËüµÄ)£¬DjangoµÄÓû§ÈÏ֤ϵͳ´¦ÀíÓû§£¬×飬ȨÏ޺ͻùÓÚ
cookieµÄÓû§sessions£¬Õâ¸öϵͳͨ³£³ÆÎª"ÈÏÖ¤/ÊÚȨ"ϵͳ£¬Õâ¸öÃû×Ö½âÊÍÁËÓû§Í¨³£·ÖÁ½¸ö²½Öè´¦Àí:
1£¬ÑéÖ¤(ÈÏÖ¤)Óû§ÊÇËýÐû³ÆµÄÈË(ͨ³£Í¨¹ý¶ÔÊý¾Ý¿â¼ì²éÓû§ÃûºÍÃÜÂë)
2£¬ÑéÖ¤Óû§ÊÚȨ´¦ÀíһЩ²Ù×÷(ͨ³£¼ì²éȨÏÞ±í)
×ñÑÕâЩÐèÒª£¬DjangoµÄÈÏÖ¤/ÊÚȨϵͳÓÉһЩ²¿·Ö×é³É:
1£¬Users
2£¬Permissions:¶þÔª(yes/no)±ê¼ÇÀ´Ö¸Ê¾Óû§ÊÇ·ñ¿ÉÒÔ´¦ÀíijһÈÎÎñ
3£¬Groups:°Ñ±êÇ©ºÍȨÏÞ¸³Ó賬¹ýÒ»¸öÓû§µÄͨ³£µÄ·½Ê½
4£¬Messages:ÅÅÈë¶ÓÁкÍÏÔʾÓû§µÄϵͳÏûÏ¢µÄ¼òµ¥·½Ê½
5£¬Profiles:ÓÃ×Ô¶¨ÒåÓòÀ©Õ¹Óû§¶ÔÏóµÄ»úÖÆ
Èç¹ûÄãÒѾʹÓÃÁËadmin¹¤¾ß(µÚ6ÕÂ)£¬ÄãÒѾ¿´µ½Ðí¶àÕâЩ¹¤¾ß£¬²¢ÇÒÈç¹ûÄãÔÚadminÖбà¼ÁËÓû§»ò×éÄãÊÂʵÉÏÒѾÔÚ
±à¼ÈÏ֤ϵͳµÄÊý¾Ý¿â±í
°²×°
ÀàËÆÓÚsession¹¤¾ß£¬ÈÏÖ¤Ö§³ÖÔÚdjango.contribÖаó¶¨ÎªDjango³ÌÐò£¬ËüÐèÒª°²×°£¬ÏñsessionϵͳһÑùËüĬÈÏÒѾ±»
°²×°£¬µ«ÊÇÈç¹ûÄãɾ³ýÁËËü£¬Ä㽫ÐèÒª×ñÑÕâЩ²½ÖèÀ´°²×°Ëü:
1£¬È·ÈÏsession¿ò¼Ü°²×°ÁË(²Î¿¼ÉÏÃæµÄÄÚÈÝ)£¬¸ú×ÙÓû§ÏÔÈ»ÐèÒªcookies£¬²¢ÇÒ¹¹½¨ÔÚsession¿ò¼ÜÖ®ÉÏ
2£¬°Ñ'django.contrib.auth'·Åµ½ÄãµÄINSTALLED_APPSÉèÖÃÖв¢ÔËÐÐmanage.py syncdb
3£¬È·ÈÏ'django.contrib.auth.middleware.AuthenticationMiddleware'ÔÚÄãµÄMIDDLEWARE_CLASSESÉèÖÃÖУ¬²¢ÇÒËüÔÚ
SessionMiddlewareÖ®ºó
ÓµÓÐÁËÕâЩ°²×°£¬ÎÒÃÇÒѾ¿ÉÒÔÔÚÊÓͼ·½·¨Öд¦ÀíÓû§£¬Ä㽫ÔÚÊÓͼÖÐʹÓÃÀ´·ÃÎÊÓû§µÄÖ÷Òª½Ó¿ÚÊÇrequest.user£¬ËüÊÇ
Ò»¸ö±íʾµ±Ç°µÇ¼µÄÓû§µÄ¶ÔÏó£¬Èç¹ûÓû§Ã»ÓеǼ£¬Ëü½«±»Ìæ´úΪһ¸öAnonymousUser¶ÔÏó(²Î¿¼ÏÂÃæ¸ü¶àϸ½Ú)
Äã¿ÉÒÔʹÓÃis_authenticated()·½·¨ºÜÇáËɵķֱæÓû§ÊÇ·ñµÇ¼:
- if request.user.is_authenticated():
- # Do something for authenticated users.
- else:
- # Do something for anonymous users.
ʹÓÃÓû§
Ò»µ©ÄãÓµÓÐÒ»¸öÓû§--ͨ³£´Órequest.userµÃµ½£¬µ«Ò²¿ÉÄÜͨ¹ýÏÂÃæÌÖÂÛµÄÒ»¸öÆäËü·½·¨µÃµ½--ÄãÒѾµÃµ½¸Ã¶ÔÏóµÄһЩ
ÓòºÍ·½·¨£¬AnonymousUser¶ÔÏó·ÂЧÆäÖÐһЩÓòºÍ·½·¨£¬µ«ÊDz»È«£¬ËùÒÔÄãÓ¦¸ÃÔÚÄãÈ·ÈÏ´¦ÀíµÄÊÇÕæÊµµÄÓû§¶ÔÏó֮ǰһ
Ö±¼ì²éuser.is_authenticated()
User¶ÔÏóµÄÓò
Field Description
username ±ØÐèµÄ£¬30¸ö×Ö·û»ò¸üÉÙ£¬Ö»ÔÊÐíÎÄ×ÖºÍÊý×Ö×Ö·û(×Öĸ£¬Êý×ÖºÍÏ»®Ïß)
first_name ¿ÉÑ¡£¬30¸ö×Ö·û»ò¸üÉÙ
last_name ¿ÉÑ¡£¬30¸ö×Ö·û»ò¸üÉÙ
email ¿ÉÑ¡£¬E-mailµØÖ·
password ±ØÐèµÄ£¬¹þÏ£µÄÔªÊý¾ÝÃØÃÜ(Django²»´æ´¢ÔʼÃÜÂë)£¬²Î¿´ÏÂÃæµÄ"ÃÜÂë"²¿·ÖµÃµ½¸ü¶à¹ØÓÚÕâ¸öÖµ
is_staff ²¼¶ûÖµ£¬Ö¸Ê¾Óû§ÊÇ·ñ¿ÉÒÔ·ÃÎÊadminÕ¾µã
is_active ²¼¶ûÖµ£¬Ö¸Ê¾Óû§ÊÇ·ñ¿ÉÒԵǼ£¬°ÑÕâ¸ö±ê¼ÇÉèÖÃΪFalse¶ø²»ÊÇɾ³ýÓû§
is_superuser ²¼¶ûÖµ£¬Ö¸Ê¾Óû§ÊÇ·ñÓµÓÐËùÓеÄȨÏÞ¶ø²»ÓÃÏÔʾµÄ¸³ÓèËüÃÇ
last_login Óû§×îºóµÇ¼µÄdatetime£¬Ä¬ÈÏÉèÖÃΪµ±Ç°date/time
date_joined µ±Óû§´´½¨Ê±µÄdatetime£¬µ±Óû§´´½¨Ê±Ä¬ÈÏÉèÖÃΪµ±Ç°date/time
User¶ÔÏóµÄ·½·¨
Method Description
is_authenticated() ¶Ô"ÕæÊµµÄ"User¶ÔÏóÒ»Ö±·µ»ØTrue£¬ÕâÊÇ·Ö±æÓû§ÊÇ·ñÈÏÖ¤µÄ·½Ê½£¬Ëü²»°µÊ¾ÈκÎȨÏÞ£¬²¢ÇÒ
²»¼ì²éÓû§ÊÇ·ñactive£¬ËüָֻʾÓû§³É¹¦ÈÏÖ¤
is_anonymous() Ö»¶ÔAnonymousUser¶ÔÏó·µ»ØTrue(¶Ô"ÕæÊµ"User¶ÔÏó·µ»ØFalse)£¬Í¨³£ÄãÓ¦¸ÃÑ¡ÔñʹÓÃ
is_authenticated()·½·¨¶ø²»ÊÇÕâ¸ö·½·¨
get_full_name() ·µ»Øfirst_name¼ÓÉÏlast_name£¬Ê¹ÓÃÒ»¸ö¿Õ¸ñ¼ä¸ô
set_password(passwd) ÉèÖÃÓû§µÄÃÜÂëΪ¸ø¶¨µÄÔʼÃÜÂ룬Ëü»á´¦ÀíÃÜÂë¹þÏ££¬ÕâÊÂʵÉϲ»»á±£´æUser¶ÔÏó
check_password(passwd) Èç¹û¸ø¶¨µÄÔʼÃÜÂëÊǸÃÓû§µÄÕýÈ·µÄÃÜÂëÔò·µ»ØTrue£¬Õâ»áÔڱȽÏʱ´¦ÀíÃÜÂë¹þÏ£
get_group_permissions() ´ÓÓû§ËùÊôµÄ×é·µ»ØÓû§ÓµÓеÄȨÏÞ×Ö·û´®µÄÁбí
get_all_permissions() ´ÓÓû§ËùÊôµÄ×éºÍÓû§µÄȨÏÞ·µ»ØÓû§ÓµÓеÄȫϢ×Ö·û´®µÄÁбí
has_perm(perm) Èç¹ûÓû§ÓµÓиÃÌØÊâȨÏÞÔò·µ»ØTrue£¬permµÄ¸ñʽΪ"package.codename"£¬Èç¹ûÓû§inactive
¸Ã·½·¨½«Ò»Ö±·µ»ØFalse
has_perms(perm_list) Èç¹ûÓû§ÓµÓÐÕâÐ©ÌØÊâȨÏÞÔò·µ»ØTrue£¬Èç¹ûÓû§Îªinactive£¬¸Ã·½·¨½«Ò»Ö±·µ»ØFalse
has_module_perms(appname)Èç¹ûÓû§ÓµÓиø¶¨appnameµÄÈÎһȨÏÞÔò·µ»ØTrue£¬Èç¹ûÓû§inactiveÔòÒ»Ö±·µ»ØFalse
get_and_delete_messages()·µ»ØÓû§µÄ¶ÓÁÐÖеÄMessage¶ÔÏóÁÐ±í²¢´Ó¶ÓÁÐÖÐɾ³ýÏûÏ¢
email_user(subj, msg) ·¢ËÍÒ»¸öe-mail¸øÓû§£¬Õâ¸öemail´ÓDEFAULT_FROM_EMAILÉèÖ÷¢ËÍ£¬ÄãÒ²¿ÉÒÔ´«µÝµÚ3¸ö²ÎÊý
from_emailÀ´¸²¸ÇemailµÄ·¢Ë͵ØÖ·
get_profile() ·µ»ØÕ¾µãÌØÓеÄÓû§µÄÂÖÀª£¬²Î¿¼ÏÂÃæµÄÂÖÀª²¿·ÖµÃµ½¸ü¶à¹ØÓÚ´Ë·½·¨
×îºó£¬User¶ÔÏóÓÉÁ½¸ö¶à¶Ô¶àÓò£¬groupsºÍpermissions£¬User¶ÔÏó¿ÉÒÔÏñÆäËü¶à¶Ô¶àÓòÒ»Ñù·ÃÎÊËüÃÇÏà¹ØµÄ¶ÔÏó:
- # Set a users groups:
- myuser.groups = group_list
- # Add a user to some groups:
- myuser.groups.add(group1, group2,...)
- # Remove a user from some groups:
- myuser.groups.remove(group1, group2,...)
- # Remove a user from all groups:
- myuser.groups.clear()
- # Permissions work the same way
- myuser.permissions = permission_list
- myuser.permissions.add(permission1, permission2, ...)
- myuser.permissions.remove(permission1, permission2, ...)
- myuser.permissions.clear()
µÇ¼ºÍ×¢Ïú
DjangoÌṩÄÚ½¨µÄÊÓͼ·½·¨À´´¦ÀíµÇ¼ºÍ×¢Ïú(ÒÔ¼°Ò»Ð©ÆäËüµÄºÃ¼¼ÇÉ)£¬µ«ÏÖÔÚÏÈÈÃÎÒÃÇ¿´¿´ÔõÑù"ÊÖ¶¯"µÇ¼ºÍ×¢ÏúÓû§
DjangoÔÚdjango.contrib.authÖÐÌṩÁ½¸ö·½·¨À´´¦ÀíÕâЩ¶¯×÷:authenticate()ºÍlogin()
ʹÓÃauthenticate()À´ÈÏÖ¤¸ø¶¨µÄÓû§ÃûºÍÃÜÂ룬ËüÓÐÁ½¸ö¹Ø¼ü×Ö²ÎÊý£¬usernameºÍpassword£¬²¢ÇÒÈç¹ûÃÜÂëÊǺϷ¨µÄÔò
Ëü·µ»ØÒ»¸öUser¶ÔÏó£¬Èç¹ûÃÜÂë²»ºÏ·¨£¬authenticate()·µ»ØNone:
- >>> from django.contrib import auth authenticate
- >>> user = auth.authenticate(username='john', password='secret')
- >>> if user is not None:
- ... print "Correct!"
- ... else:
- ... print "Oops, that's wrong!"
- Oops, that's wrong!
ÔÚÊÓͼÖÐʹÓÃlogin()À´µÇ¼Óû§£¬ËüʹÓÃÒ»¸öHttpRequest¶ÔÏóºÍÒ»¸öUser¶ÔÏó²¢Ê¹ÓÃDjangoµÄsession¿ò¼ÜÔÚsessionÖÐ
±£´æÓû§µÄID
Õâ¸öÀý×ÓչʾÁËÄãÔõÑùÔÚÊÓͼ·½·¨ÖÐʹÓÃauthenticate()ºÍlogin():
- from django.contrib import auth
- def login(request):
- username = request.POST['username']
- password = request.POST['password']
- user = auth.authenticate(username=username, password=password)
- if user is not None and user.is_active:
- # Correct password, and the user is marked "active"
- auth.login(request, user)
- # Redirect to a success page.
- return HttpResponseRedirect("/account/loggedin/")
- else:
- # Show an error page
- return HttpResponseRedirect("/account/invalid/")
ÔÚÄãµÄÊÓͼÖÐʹÓÃdjango.contrib.auth.logout()À´×¢ÏúµÇ¼µÄÓû§£¬ËüʹÓÃÒ»¸öHttpRequest¶ÔÏó²¢ÇÒûÓзµ»ØÖµ:
- from django.contrib import auth
- def logout(request):
- auth.logout(request)
- # Redirect to a success page.
- return HttpResponseRedirect("/account/loggedout/")
×¢ÒâÈç¹ûÓû§Ã»ÓеǼµÄ»°logout()²»»áÅ׳öÈκÎÒì³£
¼òµ¥·½Ê½µÄµÇ¼ºÍ×¢Ïú
ʵ¼ùÖУ¬Äãͨ³£²»ÐèҪдÄã×Ô¼ºµÄµÇ¼/×¢Ïú·½·¨£¬authϵͳ´øÓÐÒ»Ì×ÊÓͼÀ´´¦ÀíµÇ¼ºÍ×¢Ïú
ʹÓÃÈÏÖ¤ÊÓͼµÄµÚÒ»²½ÊÇÐÞ¸ÄÄãµÄURLÅäÖã¬Ä㽫ÐèÒªÌí¼ÓÕâЩÄÚÈÝ:
- from django.contrib.auth.views import login, logout
- urlpatterns = patterns('',
- # existing patterns here...
- (r'^accounts/login/$', login)
- (r'^accounts/logout/$', logout)
- )
/accounts/login/ºÍ/accounts/logout/ÊÇDjangoĬÈÏΪÕâЩÊÓͼʹÓõÄURLs£¬µ«ÊÇÄã×ö³öÒ»µãŬÁ¦¾Í¿ÉÒÔ°ÑËüÃÇ·ÅÔÚÈÎ
ºÎÄãÏëÒªµÄλÖã¬loginÊÓͼĬÈÏäÖȾregistration/login.htmlÊÓͼ(Äã¿ÉÒÔͨ¹ý´«µÝÒ»¸ö¶îÍâµÄÊÓͼ²ÎÊýtemplate_na
me¸ü¸ÄÕâ¸öÄ£°åÃû)£¬Õâ¸ö±íµ¥ÐèÒª°üº¬Ò»¸öÓû§ÃûºÍÃÜÂëÓò£¬Ò»¸ö¼òµ¥µÄÄ£°å¿ÉÄÜ¿´ÆðÀ´ÏñÕâÑù:
- {% extends "base.html" %}
- {% block content %}
- {% if form.errors %}
- <p class="error">Sorry, that's not a valid username or password</p>
- {% endif %}
- <form action='.' method='post'>
- <label for="username">User name:</label>
- <input type="text" name="username" value="" id="username">
- <label for="password">Password:</label>
- <input type="password" name="password" value="" id="password">
- <input type="submit" value="login" />
- <input type="hidden" name="next" value="{{ next }}" />
- <form action='.' method='post'>
- {% endblock %}
Èç¹ûÓû§³É¹¦µÇ¼£¬Ëý½«Ä¬Èϱ»Öض¨Ïòµ½/accounts/profile/£¬Äã¿ÉÒÔͨ¹ýÌṩһ¸ö½ÐnextµÄÔڵǼ֮ºóÖØ¶¨ÏòµÄURLÖµ
µÄhiddenÓòÀ´¸²¸ÇËü£¬ÄãÒ²¿ÉÒÔʹÓÃGET²ÎÊý´«µÝÕâ¸öÖµµ½loginÊÓͼ£¬Ëü½«×÷Ϊ½ÐnextµÄ±äÁ¿±»×Ô¶¯Ìí¼Óµ½contextÖÐ
×¢ÏúÊÓͼ¹¤×÷ÆðÀ´ÓÐÒ»µã²»Í¬£¬Ä¬ÈÏËüäÖȾregistration/logged_out.htmlÄ£°å(Ëüͨ³£°üº¬Ò»¸ö"ÄãÒѾ³É¹¦×¢Ïú"µÄÐÅ
Ï¢)£¬¾¡¹ÜÈç´Ë£¬Äã¿ÉÒÔͨ¹ýÒ»¸ö¶îÍâ²ÎÊýnext_pageÀ´µ÷ÓÃÊÓͼ£¬Ëü½«¸æËßÊÓͼÔÚ×¢ÏúºóÖØ¶¨Ïò
ÏÞÖÆµÇ¼µÄÓû§·ÃÎÊ
µ±È»£¬ÎÒÃǾÀúÕâЩÂé·³ÊÇΪÁËʹÎÒÃÇ¿ÉÒÔÏÞÖÆ·ÃÎÊÎÒÃÇÕ¾µãµÄÒ»²¿·Ö
×î¼òµ¥×îÔʼµÄÏÞÖÆ·ÃÎÊÒ³ÃæµÄ·½Ê½ÊǼì²érequest.user.is_authenticated()²¢Öض¨Ïòµ½µÇÂ¼Ò³Ãæ:
- from django.http import HttpResponseRedirect
- def my_view(request):
- if not request.user.is_authenticated():
- return HttpResponseRedirect('/login/?next=%s' % request.path)
- # ...
»òÕßÏÔʾһÌõ³ö´íÐÅÏ¢:
- def my_view(request):
- if not request.user.is_au
°²»ÕлªµçÄÔѧУרҵְҵ¹æ»®Ê¦ÎªÄãÌṩ¸ü¶à°ïÖú¡¾ÔÚÏß×Éѯ¡¿