在Django中创建会话

问题描述:

到目前为止,Django的文档技术性太强。如何创建会话并在其中存储变量或从中获取变量?我是Django框架的新手,因此文档过于技术化。会议是我的“最后一步”。在Django中创建会话

假设你想基于数据库会话(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

路德维克的答案是要走的路,但如果你想要一个更温和的介绍Django的世界,(the (free) Django Book)是一个必读。 Chapter 15处理会话。

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>")