Django基礎之Session操作


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>
login.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>
backend.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/')
views.py

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內容。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM