2010-02-19 73 views
11

到目前爲止,Django的文檔技術性太強。如何創建會話並在其中存儲變量或從中獲取變量?我是Django框架的新手,因此文檔過於技術化。會議是我的「最後一步」。在Django中創建會話

回答

23

假設你想基於數據庫會話(Django的同時也提供基於文件的會話,並根據緩存的會話):

  1. 打開settings.py,找到MIDDLEWARE_CLASSES。將'django.contrib.sessions.middleware.SessionMiddleware'添加到列表中。
  2. 在同一個文件中找到INSTALLED_APPS,並在那裏添加'django.contrib.sessions'。從命令行運行。

初始設置後,您可以在視圖中使用request.session來在請求之間存儲信息。

例如,這將存儲的信息:

request.session['name'] = 'Ludwik' 

,你可以爲伊斯利檢索:

print request.session['name'] 

if request.session['name'] == 'Ludwik': 
    print 'you are awesome!' 

對於其他的東西,你可以用做request.session對象請參閱the documentation

4

路德維克的答案是要走的路,但如果你想要一個更溫和的介紹Django的世界,(the (free) Django Book)是一個必讀。 Chapter 15處理會話。

0

MIDDLEWARE_CLASSES應該有 -

'django.contrib.sessions.middleware.SessionMiddleware' 

INSTALLED_APPS應該有 -

'django.contrib.sessions' 

改變我們的登錄以拯救我們的用戶名Cookie服務器端 -

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} 

創建FormView的觀點登錄表單,如果cookie已設置,我們將不顯示錶單 -

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', {}) 

變化url.py文件更改URL,因此對我們的新視角 -

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')) 
    url(r'^logout/', 'logout', name = 'logout'), 

創建刪除我們的Cookie簡單註銷視圖。

def logout(request): 
    try: 
     del request.session['username'] 
    except: 
     pass 
    return HttpResponse("<strong>You are logged out.</strong>")