欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django進(jìn)階之cookie和session的使用示例

 更新時(shí)間:2018年08月17日 09:51:39   作者:rottengeek  
這篇文章主要介紹了django進(jìn)階之cookie和session的使用示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

Cookies :是瀏覽器為 Web 服務(wù)器存儲(chǔ)的一小段信息。 每次瀏覽器從某個(gè)服務(wù)器請(qǐng)求頁面時(shí),它收到服務(wù)器回發(fā)送過來的cookies。它保存在瀏覽器下的某個(gè)文件夾下。

Session:Django的Session機(jī)制會(huì)向請(qǐng)求的瀏覽器發(fā)送cookie字符串。同時(shí)也會(huì)保存到本地一份,用來驗(yàn)證瀏覽器登錄是否為同一用戶。它存在于服務(wù)器,Django默認(rèn)會(huì)把session存入到數(shù)據(jù)庫中。

Session依賴于Cookie,如果瀏覽器不能保存cookies那么session就失效了。因?yàn)樗枰獮g覽器的cookie值(sessionid)去session里做對(duì)比。session就是用來在服務(wù)器端保存用戶的會(huì)話狀態(tài)。

Cookie

1、獲取Cookie:

request.COOKIES[key]
request.COOKIES.get(key)
# 普通cookie是明文傳輸?shù)?,可以直接在客戶端直接打開,所以需要加鹽,解鹽之后才能查看
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

參數(shù):

  • default: 默認(rèn)值
  • salt: 加密鹽
  • max_age: 后臺(tái)控制過期時(shí)間

2、設(shè)置Cookie:

rep = HttpResponse(...) 或 rep = render(request, ...)
rep.set_cookie(key,value,...)
# 給cookie簽名
rep.set_signed_cookie(key,value,salt='加密鹽',...)

參數(shù):

  • key, 鍵
  • value='', 值
  • max_age=None, 超時(shí)時(shí)間
  • expires=None, 超時(shí)時(shí)間(IE requires expires, so set it if hasn't been already.)
  • path='/', Cookie生效的路徑,/ 表示根路徑,特殊的:跟路徑的cookie可以被任何url的頁面訪問
  • domain=None, Cookie生效的域名
  • secure=False, https傳輸
  • httponly=False True只能http協(xié)議傳輸,無法被JavaScript獲?。ú皇墙^對(duì),底層抓包可以獲取到也可以被覆蓋),防止xss攻擊

由于cookie保存在客戶端的電腦上,所以,JavaScript和jquery也可以操作cookie。

<script src='/static/js/jquery.cookie.js'></script>
$.cookie("list_pager_num", 30,{ path: '/' });

Session

Django中默認(rèn)支持Session,其內(nèi)部提供了5種類型的Session供開發(fā)者使用:

數(shù)據(jù)庫(默認(rèn))
緩存
文件
緩存+數(shù)據(jù)庫
加密cookie

1、數(shù)據(jù)庫Session

Django默認(rèn)支持Session,并且默認(rèn)是將Session數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,即:django_session 表中。

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默認(rèn))

SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時(shí)的key,即:sessionid=隨機(jī)字符串(默認(rèn))

SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑(默認(rèn))

SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默認(rèn))

SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(默認(rèn))

SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸(默認(rèn))

SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默認(rèn))

SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關(guān)閉瀏覽器使得Session過期(默認(rèn))

SESSION_SAVE_EVERY_REQUEST = False # 是否每次請(qǐng)求都保存Session,默認(rèn)修改之后才保存(默認(rèn))

b. 使用

def index(request):
# 獲取、設(shè)置、刪除Session中數(shù)據(jù)
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在則不設(shè)置
del request.session['k1']

# 所有 鍵、值、鍵值對(duì)
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()

# 用戶session的隨機(jī)字符串
request.session.session_key

# 將所有Session失效日期小于當(dāng)前日期的數(shù)據(jù)刪除
request.session.clear_expired()

# 檢查 用戶session的隨機(jī)字符串 在數(shù)據(jù)庫中是否
request.session.exists("session_key")

# 刪除當(dāng)前用戶的所有Session數(shù)據(jù)
request.session.delete("session_key")

2、緩存Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的緩存別名(默認(rèn)內(nèi)存緩存,也可以是memcache),此處別名依賴緩存的設(shè)置


SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時(shí)的key,即:sessionid=隨機(jī)字符串
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 # 是否關(guān)閉瀏覽器使得Session過期
SESSION_SAVE_EVERY_REQUEST = False # 是否每次請(qǐng)求都保存Session,默認(rèn)修改之后才保存

b. 使用

同上

3、文件Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個(gè)臨時(shí)地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T


SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時(shí)的key,即:sessionid=隨機(jī)字符串
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 # 是否關(guān)閉瀏覽器使得Session過期
SESSION_SAVE_EVERY_REQUEST = False # 是否每次請(qǐng)求都保存Session,默認(rèn)修改之后才保存

b. 使用

同上

4、緩存+數(shù)據(jù)庫Session

數(shù)據(jù)庫用于做持久化,緩存用于提高效率

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

b. 使用

同上

5、加密cookie Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

b. 使用

同上

示例:

from django.shortcuts import render,redirect

# Create your views here.
import datetime

def login(request):
  print("COOKIES",request.COOKIES) #打印cookies 一個(gè)字典,里面多個(gè)鍵值對(duì)
  print("SESSION",request.session) #session為服務(wù)器對(duì)應(yīng)客戶信息的鍵

  if request.method=="POST":
    name=request.POST.get("user")
    pwd=request.POST.get("pwd")
    if name=="yuan" and pwd=="123":

      # ret=redirect("/index/")
      # 給對(duì)象ret設(shè)置cookie 安全性較差 ,設(shè)定有效時(shí)間max_age,expires,
      # ret.set_cookie("username",{"11":"22"},max_age=10,expires=datetime.datetime.utcnow()+datetime.timedelta(days=3))
      # return ret

      # COOKIE SESSION一起使用
      # session 以字典存放在服務(wù)器端,發(fā)給客戶端的是數(shù)據(jù)對(duì)應(yīng)的鍵,
      request.session["is_login"]=True # 在session中增加鍵值對(duì)
      request.session["user"]=name

      return redirect("/index/")

  return render(request,"login.html")


def index(request):
  if request.COOKIES.get("username",None):  # 取不到設(shè)置默認(rèn)值為None
    name = request.COOKIES.get("username",None)
    return render(request, "index.html", locals())

  # session驗(yàn)證 存在數(shù)據(jù)庫中,所以要先makemigrations生成數(shù)據(jù)庫
  if request.session.get("is_login",None):
    name=request.session.get("user",None)
    return render(request,"index.html",locals())
  else:
    return redirect("/login/")
##session獲取
request.session.get("user",None)
# 設(shè)置
request.session["user"]=name
# 刪除
del request.session.get("user")

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python arrow模塊使用方法

    Python arrow模塊使用方法

    Arrow 是用于處理日期和時(shí)間的 Python 模塊。 與內(nèi)置的日期和時(shí)間工具相比,它使創(chuàng)建,操作,格式化和轉(zhuǎn)換日期,時(shí)間和時(shí)間戳變得更加容易
    2022-10-10
  • 我就是這樣學(xué)習(xí)Python中的列表

    我就是這樣學(xué)習(xí)Python中的列表

    這篇文章主要給大家介紹了關(guān)于我是如何學(xué)習(xí)Python中的列表的,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例

    回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例

    本篇文章主要介紹了回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • python向圖片里添加文字

    python向圖片里添加文字

    這篇文章主要為大家詳細(xì)介紹了python向圖片里添加文字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 使用Python繪制圣誕樹教程詳解(附源代碼)

    使用Python繪制圣誕樹教程詳解(附源代碼)

    又是一年一度的圣誕節(jié)快到了,提到圣誕節(jié),就不得不提圣誕樹,所以本文我們將使用Python繪制一棵圣誕樹,文中有詳細(xì)的代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例

    python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例

    本文主要介紹了python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 在Python中操作文件之read()方法的使用教程

    在Python中操作文件之read()方法的使用教程

    這篇文章主要介紹了在Python中操作文件之read()方法的使用教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Python3.4學(xué)習(xí)筆記之 idle 清屏擴(kuò)展插件用法分析

    Python3.4學(xué)習(xí)筆記之 idle 清屏擴(kuò)展插件用法分析

    這篇文章主要介紹了Python3.4 idle 清屏擴(kuò)展插件用法,簡單分析了idle清屏的幾種方法及idle清屏插件的相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • python3 deque 雙向隊(duì)列創(chuàng)建與使用方法分析

    python3 deque 雙向隊(duì)列創(chuàng)建與使用方法分析

    這篇文章主要介紹了python3 deque 雙向隊(duì)列創(chuàng)建與使用方法,結(jié)合實(shí)例形式分析了python3 deque 雙向隊(duì)列創(chuàng)建、添加、清空、拷貝等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Python使用filetype精確判斷文件類型

    Python使用filetype精確判斷文件類型

    判斷文件類型在開發(fā)中非常常見的需求,怎樣才能準(zhǔn)確的判斷文件類型呢?首先大家想到的是文件的后綴,但是非常遺憾的是這種方法是非常不靠譜的,因?yàn)槲募暮缶Y是可以隨意更改的,而python中有個(gè)小插件可以實(shí)現(xiàn),下面我們就來詳細(xì)探討下
    2017-07-07

最新評(píng)論