【发布时间】:2010-02-19 00:28:05
【问题描述】:
到目前为止,Django 的文档太技术性了。如何创建会话并在其中存储变量或从中获取变量?我是 Django 框架的新手,因此文档太技术性了。会议是我的“最后一步”。
【问题讨论】:
到目前为止,Django 的文档太技术性了。如何创建会话并在其中存储变量或从中获取变量?我是 Django 框架的新手,因此文档太技术性了。会议是我的“最后一步”。
【问题讨论】:
假设您想要基于数据库的会话(Django 还提供基于文件的会话和基于缓存的会话):
MIDDLEWARE_CLASSES。将'django.contrib.sessions.middleware.SessionMiddleware' 添加到列表中。INSTALLED_APPS,并在其中添加'django.contrib.sessions'。manage.py syncdb。初始设置后,您可以在视图中使用request.session 来存储请求之间的信息。
例如这将存储信息:
request.session['name'] = 'Ludwik'
您可以轻松检索它:
print request.session['name']
或
if request.session['name'] == 'Ludwik':
print 'you are awesome!'
有关您可以使用request.session 对象执行的其他操作,请参阅the documentation。
【讨论】:
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>")
【讨论】: