在Django中创建会话(Create a Session in Django)

问题

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

回答1

假设您需要基于数据库的会话(Django还提供了基于文件的会话和基于缓存的会话):

  1. 打开settings.py并找到MIDDLEWARE_CLASSES 。 将'django.contrib.sessions.middleware.SessionMiddleware'添加到列表中。
  2. 在同一文件中找到INSTALLED_APPS在其中添加'django.contrib.sessions'
  3. 从命令行运行manage.py syncdb

初始设置后,您可以在视图中使用request.session来存储请求之间的信息。

例如,这将存储以下信息:

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

您可以轻松地检索它:

print request.session['name']

或者

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

对于您可以使用request.session对象执行的其他操作,请参见文档。

回答2

Ludwik的答案是要走的路,但是如果您想更温和地介绍Django,(必读(免费)Django书)是必读的。 第15章讨论会话。

回答3

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

更多相关内容:请点击查看