1. 創建一個示例
1.1 第一步
首先創建一個django項目,創建app01, 連接數據庫,做好准備工作。
然后在templates目錄下創建兩個html:
login.html負責登錄頁面;
backend頁面代表后台頁面。

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>login</title> 6 <link rel="stylesheet" href="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/css/bootstrap.min.css"> 7 </head> 8 <body> 9 <div class="container"> 10 <form action="login.html" method="post"> 11 <div class="form-group"> 12 <label class="sr-only">username</label> 13 <input type="text" class="form-control" name="username" placeholder="用戶名"/> 14 </div> 15 <div class="form-group"> 16 <label class="sr-only">Password</label> 17 <input type="password" class="form-control" name="passwd" placeholder="密碼"/> 18 </div> 19 <div class="form-group"> 20 <input class="btn btn-primary" type="submit" value="http://830909.blog.51cto.com/8311014/Submit"> 21 </div> 22 </form> 23 </div> 24 <script type="application/Javascript" src="http://830909.blog.51cto.com/static/js/jquery-2.2.1.min.js"></script> 25 <script type="application/javascript" src="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script> 26 </body> 27 </html>

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>backend</title> 6 <link rel="stylesheet" href="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/css/bootstrap.min.css"> 7 <link rel="stylesheet" href="http://830909.blog.51cto.com/static/css/commons.css"> 8 </head> 9 <body> 10 <div class="container"> 11 <h2>cookie 內容是 {{ cookie_content }}</h2> 12 <h2>session 內容是 {{ session_content }}</h2> 13 <h2>登錄用戶名 :{{ username }}</h2> 14 <a href="http://830909.blog.51cto.com/logout/">注銷</a> 15 </div> 16 <script type="application/javascript" src="http://830909.blog.51cto.com/static/js/jquery-2.2.1.min.js"></script> 17 <script type="application/javascript" src="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script> 18 </body> 19 </html>
1.2 第二步
編輯app01應用下的views.py文件,編寫代碼邏輯部分。

1 # /usr/bin/env python 2 # coding:utf-8 3 from django.shortcuts import render 4 from django.shortcuts import redirect 5 def login(request): 6 if request.method=="POST": 7 username=request.POST['username'] 8 pwd=request.POST['passwd'] 9 if username=='abc' and pwd=='123': 10 #設置session內部的字典內容 11 request.session['is_login']='true' 12 request.session['username']='abc' 13 #登錄成功就將url重定向到后台的url 14 return redirect('/backend/') 15 #登錄不成功或第一訪問就停留在登錄頁面 16 return render(request,'login.html') 17 def backend(request): 18 """ 19 這里必須用讀取字典的get()方法把is_login的value缺省設置為False, 20 當用戶訪問backend這個url先嘗試獲取這個瀏覽器對應的session中的 21 is_login的值。如果對方登錄成功的話,在login里就已經把is_login 22 的值修改為了True,反之這個值就是False的 23 """ 24 is_login=request.session.get('is_login',False) 25 #如果為真,就說明用戶是正常登陸的 26 if is_login: 27 #獲取字典的內容並傳入頁面文件 28 cookie_content=request.COOKIES 29 session_content=request.session 30 username=request.session['username'] 31 return render(request,'backend.html', 32 { 33 'cookie_content':cookie_content, 34 'session_content':session_content, 35 'username':username 36 }) 37 else: 38 """ 39 如果訪問的時候沒有攜帶正確的session, 40 就直接被重定向url回login頁面 41 """ 42 return redirect('/login/') 43 def logout(request): 44 """ 45 直接通過request.session['is_login']回去返回的時候, 46 如果is_login對應的value值不存在會導致程序異常。所以 47 需要做異常處理 48 """ 49 try: 50 #刪除is_login對應的value值 51 del request.session['is_login'] 52 except KeyError: 53 pass 54 #點擊注銷之后,直接重定向回登錄頁面 55 return redirect('/login/')
1.3 編輯
mydjango目錄下的urls.py文件,設置函數與頁面的綁定關系。
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), url(r'^backend/', views.backend), url(r'^logout/', views.logout), ]
最后打開瀏覽器直接訪問/backend/頁面的時候直接就被重定向了到/login/ 。
只有在輸入了正確的用戶名和密碼之后才進入了/backend/頁面。
從上圖中我們看到有以下幾點:
- 1. login頁面正確登錄的話,后台頁面可以獲取到瀏覽器攜帶的cookie的。
- 2. 第一行的sessionid其實就是cookie值。
- 3. session的內容是加密的,從客戶端獲取不到session的內容。
- 4. 服務端可以通過預設的key值取出session的內容並打印到前端。
從火狐瀏覽器里查看cookie:
django的session默認是存儲在數據庫里的,我們再到數據庫查看一下真正session內容。