python框架之Django(7)-Cookie&Session使用

Cookie

添加

  • response.set_cookie

    添加明文cookiehtml

    response.set_cookie(key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False)
  • response.set_signed_cookie

    添加加密cookie數據庫

    response.set_signed_cookie(key, value, salt='', **kwargs)
  • 參數說明

    key:鍵
    value='':值
    max_age=None:超時時間(單位爲秒)
    expires=None:超時時間(針對IE)
    path='/': Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie能夠被任何url的頁面訪問
    domain=None:Cookie生效的域名
    secure=False:https傳輸
    httponly=False:只能http協議傳輸,沒法被JavaScript獲取(不是絕對,底層抓包能夠獲取到也能夠被覆蓋)

獲取

  • request.COOKIES[key]

    獲取明文cookie。瀏覽器

    request.COOKIES['key']
  • request.get_signed_cookie

    獲取加密cookie。cookie

    request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
  • 參數說明

    default: 默認值
    salt='': 加密鹽
    max_age=None: 後臺控制過時時間

刪除

  • delete_cookie

    刪除用戶瀏覽器上以前設置的對應key的cookie。session

    response.delete_cookie(key, path='/', domain=None)
  •  參數說明

    key:鍵
    path='/': Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie能夠被任何url的頁面訪問
    domain=None:Cookie生效的域名

示例

  • cookie版登錄校驗

     1 # 校驗登陸裝飾器
     2 def check_login(func):
     3     @wraps(func)
     4     def inner(request, *args, **kwargs):
     5         next_url = request.get_full_path()
     6         # 用登陸時設置的鹽獲取指定key的cookie
     7         if request.get_signed_cookie("isLogin", salt="salt", default=None) == "yes":
     8             # 已經登陸的用戶
     9             return func(request, *args, **kwargs)
    10         else:
    11             # 沒有登陸的用戶,跳轉到登陸頁面
    12             return redirect("/login/?next={}".format(next_url))
    13     return inner
    14 
    15 # 登陸
    16 def login(request):
    17     if request.method == "POST":
    18         username = request.POST.get("username")
    19         passwd = request.POST.get("password")
    20         if username == "username" and passwd == "password":
    21             next_url = request.GET.get("next")
    22             if next_url:
    23                 response = redirect(next_url)
    24             else:
    25                 response = redirect("/home/")
    26             # 設置cookie並加鹽
    27             response.set_signed_cookie("isLogin", "yes", salt="salt")
    28             return response
    29     return render(request, "login.html")
    Code

Session

添加

request.session[key] = value
request.session.setdefault(key,value) # 存在則不設置

獲取

request.session[key]
request.session.get(key,default) # 未獲取到值時使用默認值default

刪除

del request.session[key]

相關方法

request.session.keys() # 獲取全部鍵
request.session.values() # 獲取全部值
request.session.items() # 獲取全部鍵值
request.session.set_expiry(7) # 設置超時時間
request.session.session_key # 獲取sessionid值
request.session.clear_expired() # 將全部Session失效日期小於當前日期的數據刪除 
request.session.exists(session_key) # 檢查會話session的key(sessionid)在數據庫中是否存在
request.session.delete() # 刪除當前會話的全部Session數據
request.session.flush() # 刪除當前的會話數據並刪除會話的
request.session.set_expiry(value) Cookie # 設置會話Session和Cookie的超時時間
    * 若是value是個整數,session會在些秒數後失效。
    * 若是value是個datatime或timedelta,session就會在這個時間後失效。
    * 若是value是0,用戶關閉瀏覽器session就會失效。
    * 若是value是None,session會依賴全局session失效策略。

示例

  • session版校驗登陸

     1 from functools import wraps
     2 
     3 
     4 def check_login(func):
     5     @wraps(func)
     6     def inner(request, *args, **kwargs):
     7         next_url = request.get_full_path()
     8         if request.session.get("user"):
     9             return func(request, *args, **kwargs)
    10         else:
    11             return redirect("/login/?next={}".format(next_url))
    12     return inner
    13 
    14 
    15 def login(request):
    16     if request.method == "POST":
    17         user = request.POST.get("user")
    18         pwd = request.POST.get("pwd")
    19 
    20         if user == "alex" and pwd == "alex1234":
    21             # 設置session
    22             request.session["user"] = user
    23             # 獲取跳到登錄頁面以前的URL
    24             next_url = request.GET.get("next")
    25             # 若是有,就跳轉回登錄以前的URL
    26             if next_url:
    27                 return redirect(next_url)
    28             # 不然默認跳轉到index頁面
    29             else:
    30                 return redirect("/index/")
    31     return render(request, "login.html")
    32 
    33 
    34 @check_login
    35 def logout(request):
    36     # 刪除全部當前請求相關的session
    37     request.session.delete()
    38     return redirect("/login/")
    39 
    40 
    41 @check_login
    42 def index(request):
    43     current_user = request.session.get("user", None)
    44     return render(request, "index.html", {"user": current_user})
    Code

相關配置

Django相關配置->Session相關dom

相關文章
相關標籤/搜索