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

django框架cookie和session用法實(shí)例詳解

 更新時(shí)間:2019年12月10日 12:01:05   作者:dawn-liu  
這篇文章主要介紹了django框架cookie和session用法,結(jié)合實(shí)例形式詳細(xì)分析了Django框架cookie和session的功能、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了django框架cookie和session用法。分享給大家供大家參考,具體如下:

首先知道http協(xié)議

http協(xié)議它是無(wú)狀態(tài)的協(xié)議,驗(yàn)證的信息不會(huì)保留

基于請(qǐng)求響應(yīng),短連接

cookie

指一段小信息,內(nèi)部是一組組的鍵值對(duì),保存在客戶端

訪問(wèn)一個(gè)地址時(shí),服務(wù)器生成一個(gè)cookie,由瀏覽器保留在本地,再次訪問(wèn)地址時(shí)就會(huì)攜帶這個(gè)cookie,一般用于用戶信息的驗(yàn)證

cookie的設(shè)置:

obj.set_cookie(key,value,...)

下面來(lái)看一個(gè)簡(jiǎn)單的例子

#設(shè)置cookie
def login(request):
 if request.method=="POST":
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  user=UserInfo.objects.filter(user=user,pwd=pwd).first()
  if user:
   obj=HttpResponse("登陸成功")
   obj.set_cookie("is_login",True)
   return obj
 return render(request,"login.html")

#獲取cookie并進(jìn)行判斷
def index(request):
 ret=request.COOKIES.get("is_login")
 if not ret:
  return redirect("/login/")
 return render(request,"index.html")

其他參數(shù)

參數(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的頁(yè)面訪問(wèn)
domain=None, Cookie生效的域名
secure=False, https傳輸
httponly=True 只能http協(xié)議傳輸,無(wú)法被JavaScript獲?。ú皇墙^對(duì),底層抓包可以獲取到也可以被覆蓋)

cookie的刪除

obj.delete_cookie("is_login")

下面來(lái)看一個(gè)登陸和注銷頁(yè)面

def books(request):
 is_login=request.COOKIES.get("is_login")
 if not is_login:
  return_url=request.path_info #判斷是否有cookies沒有則記錄到return_url
  if return_url:
   return redirect("{}?return_url={}".format("/login/",return_url)) #將return_url加到路徑后面返回到login頁(yè)面,等到用戶驗(yàn)證登陸后直接跳轉(zhuǎn)到這個(gè)頁(yè)面
 book_list=Book.objects.all()
 return render(request,"books.html",locals())
def login(request):
 error_msg=''
 if request.method=="POST":
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  user_au=UserInfo.objects.filter(user=user,pwd=pwd).first() #從數(shù)據(jù)庫(kù)中驗(yàn)證用戶
  if user_au:
   return_url=request.GET.get('return_url') 
   if return_url:                        #判斷是否有return_url
    ret=redirect(return_url)
   else:
    ret=HttpResponse("進(jìn)入其他頁(yè)面")    
   ret.set_cookie("is_login",True)      #驗(yàn)證成功則設(shè)置cookies
   return ret
  error_msg="用戶名或者密碼錯(cuò)誤"
 return render(request,"login.html",locals())

def logout(request):
 ret=redirect("/login/")
 ret.delete_cookie('is_login')
 return ret

驗(yàn)證第一種情況

 ---------------------------》》》》》  

#####################################################################################################################################################################################

驗(yàn)證第二種情況

----------》》》》》------》》》

session

由于cookies保存在客戶端上面,存在不安全因素,并且有長(zhǎng)度限制---4096

進(jìn)而引入了session

session的用法

# 獲取、設(shè)置、刪除Session中數(shù)據(jù)
request.session['k1'] #獲取
request.session.get('k1',None) #獲取
request.session['k1'] = 123 #設(shè)置
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()
# 會(huì)話session的key
request.session.session_key
# 將所有Session失效日期小于當(dāng)前日期的數(shù)據(jù)刪除
request.session.clear_expired()
# 檢查會(huì)話session的key在數(shù)據(jù)庫(kù)中是否存在
request.session.exists("session_key")
# 刪除當(dāng)前會(huì)話的所有Session數(shù)據(jù)
request.session.delete() #刪除reponse sessionid,用戶已經(jīng)訪問(wèn)不了了,但是可以看到 request sessionid
# 刪除當(dāng)前的會(huì)話數(shù)據(jù)并刪除會(huì)話的Cookie。
request.session.flush() # reponse 和 request sessionid都看不到
 這用于確保前面的會(huì)話數(shù)據(jù)不可以再次被用戶的瀏覽器訪問(wèn)
 例如,django.contrib.auth.logout() 函數(shù)中就會(huì)調(diào)用它。
# 設(shè)置會(huì)話Session和Cookie的超時(shí)時(shí)間
request.session.set_expiry(value)
 * 如果value是個(gè)整數(shù),session會(huì)在些秒數(shù)后失效。
 * 如果value是個(gè)datatime或timedelta,session就會(huì)在這個(gè)時(shí)間后失效。
 * 如果value是0,用戶關(guān)閉瀏覽器session就會(huì)失效。
 * 如果value是None,session會(huì)依賴全局session失效策略。

下面來(lái)看一個(gè)例子

def books(request):
 # is_login=request.COOKIES.get("is_login")
 is_login=request.session.get("is_login")
 if not is_login:
  return_url=request.path_info
  if return_url:
   return redirect("{}?return_url={}".format("/login/",return_url))
 book_list=Book.objects.all()
 return render(request,"books.html",locals())
def login(request):
 error_msg=''
 if request.method=="POST":
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  user_au=UserInfo.objects.filter(user=user,pwd=pwd).first()
  if user_au:
   return_url=request.GET.get('return_url')
   if return_url:
    ret=redirect(return_url)
   else:
    ret=HttpResponse("進(jìn)入其他頁(yè)面")
   # ret.set_cookie("is_login",True)
   request.session['is_login']=True
   return ret
  error_msg="用戶名或者密碼錯(cuò)誤"
 return render(request,"login.html",locals())
def logout(request):
 ret=redirect("/login/")
 # ret.delete_cookie('is_login')
 request.session.delete() #刪除Reponse sessionID
 # request.session.flush() #刪除Reponse sessionID和Request sessionID
 return ret

設(shè)置了session之后,數(shù)據(jù)庫(kù)會(huì)自動(dòng)生成一個(gè)表,表名:django_session

我們來(lái)查看session的默認(rèn)設(shè)置

from django.conf import settings,global_settings
通過(guò) global_settings查看到下面信息
############
# SESSIONS #
############

# Cache to store session data if using the cache session backend.
SESSION_CACHE_ALIAS = 'default'
# Cookie name. This can be whatever you want.
SESSION_COOKIE_NAME = 'sessionid'
# Age of cookie, in seconds (default: 2 weeks).
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
# A string like ".example.com", or None for standard domain cookie.
SESSION_COOKIE_DOMAIN = None
# Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_SECURE = False
# The path of the session cookie.
SESSION_COOKIE_PATH = '/'
# Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
SESSION_COOKIE_HTTPONLY = True
# Whether to save the session data on every request.
SESSION_SAVE_EVERY_REQUEST = False
# Whether a user's session cookie expires when the Web browser is closed.
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# The module to store session data
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
# Directory to store session files if using the file session module. If None,
# the backend will use a sensible default.
SESSION_FILE_PATH = None
# class to serialize session data
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'

 

1. 數(shù)據(jù)庫(kù)Session

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

2. 緩存Session

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

3. 文件Session

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

4. 緩存+數(shù)據(jù)庫(kù)

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

5. 加密Cookie Session

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

其他公用設(shè)置項(xiàng):

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過(guò)期(默認(rèn))
SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次請(qǐng)求都保存Session,默認(rèn)修改之后才保存(默認(rèn))

希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Pycharm不同版本鏡像源添加方法

    Pycharm不同版本鏡像源添加方法

    本文主要介紹了Pycharm不同版本鏡像源添加方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python實(shí)現(xiàn)將Excel轉(zhuǎn)換為json的方法示例

    Python實(shí)現(xiàn)將Excel轉(zhuǎn)換為json的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)將Excel轉(zhuǎn)換為json的方法,涉及Python文件讀寫及格式轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python簡(jiǎn)單I/O操作示例

    Python簡(jiǎn)單I/O操作示例

    這篇文章主要介紹了Python簡(jiǎn)單I/O操作,結(jié)合實(shí)例形式分析了Python針對(duì)文件的I/O讀寫及cPickle模塊相關(guān)使用操作技巧,需要的朋友可以參考下
    2019-03-03
  • Python pip配置國(guó)內(nèi)源的方法

    Python pip配置國(guó)內(nèi)源的方法

    這篇文章主要介紹了Python pip配置國(guó)內(nèi)源的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python Pandas批量讀取csv文件到dataframe的方法

    Python Pandas批量讀取csv文件到dataframe的方法

    這篇文章主要介紹了Python Pandas批量讀取csv文件到dataframe的方法,需要的朋友可以參考下
    2018-10-10
  • pycharm 中mark directory as exclude的用法詳解

    pycharm 中mark directory as exclude的用法詳解

    今天小編就為大家分享一篇pycharm 中mark directory as exclude的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 淺談django url請(qǐng)求與數(shù)據(jù)庫(kù)連接池的共享問(wèn)題

    淺談django url請(qǐng)求與數(shù)據(jù)庫(kù)連接池的共享問(wèn)題

    今天小編就為大家分享一篇淺談django url請(qǐng)求與數(shù)據(jù)庫(kù)連接池的共享問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python添加命令行參數(shù)的詳細(xì)過(guò)程

    python添加命令行參數(shù)的詳細(xì)過(guò)程

    Click 是 Flask 的開發(fā)團(tuán)隊(duì) Pallets 的另一款開源項(xiàng)目,它是用于快速創(chuàng)建命令行的第三方模塊,這篇文章主要介紹了python怎么添加命令行參數(shù),需要的朋友可以參考下
    2023-06-06
  • 基于Python編寫一個(gè)監(jiān)控CPU的應(yīng)用系統(tǒng)

    基于Python編寫一個(gè)監(jiān)控CPU的應(yīng)用系統(tǒng)

    在使用電腦辦公時(shí),有時(shí)候不知道哪些軟件或進(jìn)程會(huì)占用大量的資源,導(dǎo)致進(jìn)行其他任務(wù)時(shí)出現(xiàn)變慢、卡頓等現(xiàn)象。因此,實(shí)時(shí)監(jiān)控系統(tǒng)的資源就變得非常重要。本文用Python編寫了一款超治愈的RunCat監(jiān)控應(yīng)用系統(tǒng),需要的可以參考一下
    2022-06-06
  • python中的Elasticsearch操作匯總

    python中的Elasticsearch操作匯總

    這篇文章主要介紹了python中的Elasticsearch操作匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論