在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Django Session會(huì)話
Django Session會(huì)話
Django創(chuàng)建視圖
Django教程
Django表單處理
Django創(chuàng)建工程
Django Cookies處理
Django快速入門-表單
Django管理員界面
Django快速入門
Django通用視圖
Django緩存
Django Apache配置
Django發(fā)送E-mail
Django模板系統(tǒng)
Django模型
Django基礎(chǔ)
Django RSS
Django Ajax應(yīng)用
Django快速入門-視圖
Django上傳文件
Django頁(yè)面重定向
Django開發(fā)環(huán)境安裝配置
Django快速入門-數(shù)據(jù)庫(kù)模型
Django URL映射
Django生命周期

Django Session會(huì)話

如前所述,我們可以在Web應(yīng)用程序客戶端使用Cookie來(lái)存儲(chǔ)大量的有用數(shù)據(jù)。 我們?cè)诖酥耙呀?jīng)看到了可以使用客戶端的cookie存儲(chǔ)各種數(shù)據(jù),在Web應(yīng)用程序這是非常有用的。這就導(dǎo)致了很多要保存數(shù)據(jù)的重要性和一些安全漏洞問題。

出于安全原因,Django有一個(gè)會(huì)話框架來(lái)處理Cookies。 會(huì)話用于抽象的接收和發(fā)送cookie,數(shù)據(jù)保存在服務(wù)器端(如數(shù)據(jù)庫(kù)),而客戶端的cookie只是有識(shí)別會(huì)話ID。會(huì)話也有助于避免在用戶瀏覽器設(shè)置為“不接受”cookies行為。

設(shè)置會(huì)話

在Django中,使會(huì)話在項(xiàng)目 settings.py 完成,通過添加一些行到MIDDLEWARE_CLASSES和INSTALLED_APPS選項(xiàng)。這應(yīng)該在創(chuàng)建項(xiàng)目完成,但它總是很容易知道,所以MIDDLEWARE_CLASSES應(yīng)該類似如下 ?

'django.contrib.sessions.middleware.SessionMiddleware'
INSTALLED_APPS應(yīng)該有 -
'django.contrib.sessions' 

默認(rèn)情況下,Django在數(shù)據(jù)庫(kù)保存會(huì)話信息(表django_session中或集合),但可以用其他的方式類似配置的引擎存儲(chǔ)的信息:在文件中或在緩存中。

當(dāng)會(huì)話啟用,每個(gè)請(qǐng)求(在Django任何針對(duì)第一個(gè)參數(shù))有一個(gè)會(huì)話(字典)屬性。

讓我們創(chuàng)建一個(gè)簡(jiǎn)單的示例,看看如何創(chuàng)建和保存會(huì)話。我們之前已經(jīng)建立了一個(gè)簡(jiǎn)單的登錄系統(tǒng)(見Django的表單處理的章節(jié)和Django的Cookies處理一章)。讓我們保存用戶名在cookie。因此如果不注銷,訪問我們的登錄頁(yè)面時(shí),你不會(huì)看到登錄表單。 在Django通過保存Cookie在服務(wù)器端,使用cookies處理更加安全。

對(duì)于這一點(diǎn),首先讓我們改變登錄代碼以保存username 在服務(wù)器端-
def login(request):
   username = 'not logged in'
   
   if request.method == 'POST':
      MyLoginForm = LoginForm(request.POST)
      
      if MyLoginForm.is_valid():
         username = MyLoginForm.cleaned_data['username']
         request.session['username'] = username
      else:
         MyLoginForm = LoginForm()
			
   return render(request, 'loggedin.html', {"username" : username}
那么讓我們來(lái)創(chuàng)建視圖對(duì)應(yīng)登錄表單的視圖,如果cookie設(shè)置將不會(huì)顯示表單 -
def formView(request):
   if request.session.has_key('username'):
      username = request.session['username']
      return render(request, 'loggedin.html', {"username" : username})
   else:
      return render(request, 'login.html', {}) 

現(xiàn)在,讓我們修改url.py文件并更改URL,因此配對(duì)新視圖 ?

from django.conf.urls import patterns, url
from django.views.generic import TemplateView

urlpatterns = patterns('myapp.views',
   url(r'^connection/','formView', name = 'loginform'),
   url(r'^login/', 'login', name = 'login')) 

當(dāng)訪問 /myapp/connection,將能看到如下頁(yè)面?

你會(huì)被重定向到下面的頁(yè)面 -

現(xiàn)在,如果您嘗試再次訪問/myapp/connection,它會(huì)直接重定向到第二個(gè)屏幕。
讓我們創(chuàng)建一個(gè)簡(jiǎn)單的注銷視圖,用于清除Cookie。
def logout(request):
   try:
      del request.session['username']
   except:
      pass
   return HttpResponse("<strong>You are logged out.</strong>")
并在 myapp/url.py 中配對(duì) URL 注銷
url(r'^logout/', 'logout', name = 'logout'),
現(xiàn)在,如果訪問/myapp/logout,將得到如下頁(yè)面-

如果再次訪問 /myapp/connection ,將會(huì)得到的登錄表單(屏幕1)。

可能使用會(huì)話的一些動(dòng)作

我們已經(jīng)看到如何存儲(chǔ)和訪問會(huì)話,下面是一個(gè)很好的了解請(qǐng)求的會(huì)話屬性還有其他一些有用的操作,如 -

  • set_expiry (value) ? 設(shè)置會(huì)話的過期時(shí)間

  • get_expiry_age() ? 返回直到會(huì)話過期的秒數(shù)

  • get_expiry_date() ? 返回本會(huì)話將到期的日期

  • clear_expired() ? 從會(huì)話中刪除過期的會(huì)話存儲(chǔ)

  • get_expire_at_browser_close() ? 返回true或false,具體取決于用戶的會(huì)話cookie是否已過期在用戶的Web瀏覽器關(guān)閉時(shí)