天天看點

Django之Session

Django  -- Seeion介紹

問:       Django的session是什麼?

答:       Django 完全支援匿名 Session的。 Session 架構允許每一個使用者儲存并取回資料。它将資料儲存在

伺服器端

,并将發送和接收, Cookie的操作包裝起來。在 Cookie 中包含的是 Session ID,而不是資料本身。

好了回到正題,那麼我們來簡單的使用一下Session把.

壹:Seeion的簡單使用

def index(request):
        # 擷取、設定、删除Session中資料
        request.session['v1']
        request.session.get('v1',None)
        request.session['v1'] = 123
        request.session.setdefault('v1',123) # 存在則不設定
        del request.session['v1']
 
        # 所有 鍵、值、鍵值對
        request.session.keys()
        request.session.values()
        request.session.items()
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()
 
        # 使用者session的随機字元串
        request.session.session_key
 
        # 将所有Session失效日期小于目前日期的資料删除
        request.session.clear_expired()
 
        # 檢查 使用者session的随機字元串 在資料庫中是否
        request.session.exists("session_key")
 
        # 删除目前使用者的所有Session資料
        request.session.delete("session_key")
      

貳:Session的種類

Django中預設支援Session,其内部提供了5種類型的Session供開發者使用,使用以下的類型隻需要在引擎修改下配置換成相應的類型就可以了。

  ①資料庫(預設)

  ②緩存

  ③檔案

  ④緩存+資料庫

  ⑤加密cookie

①資料庫Session

Django預設支援Session,并且預設是将Session資料存儲在資料庫中,即:django_session 表中。

配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(預設)
     
    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie儲存在浏覽器上時的key,即:sessionid=随機字元串(預設)
    SESSION_COOKIE_PATH = "/"                               # Session的cookie儲存的路徑(預設)
    SESSION_COOKIE_DOMAIN = None                             # Session的cookie儲存的域名(預設)
    SESSION_COOKIE_SECURE = False                            # 是否Https傳輸cookie(預設)
    SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie隻支援http傳輸(預設)
    SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(預設)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否關閉浏覽器使得Session過期(預設)
    SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次請求都儲存Session,預設修改之後才儲存(預設)      
Django之Session
Django之Session
使用
 
    def index(request):
        # 擷取、設定、删除Session中資料
        request.session['k1']  # 擷取
        request.session.get('k1',None)
        request.session['k1'] = 123  # 設定
        request.session.setdefault('k1',123) # 設定,存在則不設定
       
        del request.session['k1']
 
        # 擷取所有 鍵、值、鍵值對
        request.session.keys()
        request.session.values()
        request.session.items()
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()
 
 
        # 使用者session的随機字元串(存在用戶端浏覽器中,也存在服務端的資料庫中)
        request.session.session_key
 
        # 将所有Session失效日期小于目前日期的資料删除
        request.session.clear_expired()
 
        # 檢查 使用者session的随機字元串 在資料庫中是否
        request.session.exists("session_key")
 
        # 删除目前使用者的所有Session資料
        request.session.delete("session_key")      

使用

Django之Session
Django之Session
def session(request):
    # request.session
    request.session['k1'] = 123  # 設定session
    # request.session['k1']
    print(request.session.session_key)  # 獲得使用者session的随機字元串(存在用戶端浏覽器中,也存在服務端的資料庫中)
    return HttpResponse('session')
 
 
def index(request):  # 獲得session
    return HttpResponse(request.session['k1'])  # 這裡可以直接讀取到session      

簡單列子

②緩存Session

Django之Session
Django之Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
    SESSION_CACHE_ALIAS = 'default'                            # 使用的緩存别名(預設記憶體緩存,也可以是memcache),此處别名依賴緩存的設定
 
 
    SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie儲存在浏覽器上時的key,即:sessionid=随機字元串
    SESSION_COOKIE_PATH = "/"                                # Session的cookie儲存的路徑
    SESSION_COOKIE_DOMAIN = None                              # Session的cookie儲存的域名
    SESSION_COOKIE_SECURE = False                             # 是否Https傳輸cookie
    SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie隻支援http傳輸
    SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否關閉浏覽器使得Session過期
    SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次請求都儲存Session,預設修改之後才儲存      

配置 settings.py

使用方法和以上列子是一樣的,隻需要簡單的修改下配置就可以.

③檔案Session

Django之Session
Django之Session
配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 緩存檔案路徑,如果為None,則使用tempfile子產品擷取一個臨時位址tempfile.gettempdir()    #如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
 
 
    SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie儲存在浏覽器上時的key,即:sessionid=随機字元串
    SESSION_COOKIE_PATH = "/"                                  # Session的cookie儲存的路徑
    SESSION_COOKIE_DOMAIN = None                                # Session的cookie儲存的域名
    SESSION_COOKIE_SECURE = False                               # 是否Https傳輸cookie
    SESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie隻支援http傳輸
    SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否關閉浏覽器使得Session過期
    SESSION_SAVE_EVERY_REQUEST = False                          # 是否每次請求都儲存Session,預設修改之後才儲存      

使用方法同上               (↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑)

④緩存+資料庫Session

Django之Session
Django之Session
資料庫用于做持久化,緩存用于提高效率
配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎      

配置

⑤加密Cookie,Session

Django之Session
Django之Session
配置 settings.py
     
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎      

⑥登入認證小列子

Django之Session
Django之Session
<form class="common_form" id="Form" method="post" action="/app01/login/">
    <div><h1 class="login_title">登入</h1></div>
    <div style="width: 600px">
        <div class="form_group"><input name="username" class="form-control" label='使用者名' type="text" placeholder="使用者名" require='true'></div>
    </div>
    <div style="width: 600px">
        <div class="form_group"><input name="password" class="form-control" label='密碼' type="password" placeholder="密碼" require='true'></div>
    </div>
    <div class="form_group"><input class="btn btn-info form_btn" type="submit" value="登入"></div>
</form>      

HTML

Django之Session
Django之Session
def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        if username == "zhangsan" and password == "123456":
            request.session["IS_LOGIN"] = True  #建立session
            return redirect("/app01/home/")
    return render(request,"app01/login.html")

def home(request):
    islogin = request.session.get("IS_LOGIN",False)
    if islogin:#如果使用者已登入
        return render(request,"app01/menus.html")
    else:
        return redirect("/app01/login/")

def logout(request):#退出
    try:
        del request.session['IS_LOGIN']
    except KeyError:
        pass
    return redirect("/app01/login/")      

views