Django完全支持也匿名会话,简单说就是使用跨网页之间可以进行通讯,比如显示用户名,用户是否已经发表评论。session框架让你存储和获取访问者的数据信息,这些信息保存在服务器上(默认是数据库中),以 cookies 的方式发送和获取一个包含 session ID的值,并不是用cookies传递数据本身。启用session
编辑settings.py中的一些配置 MIDDLEWARE_CLASSES 确保其中包含以下内容 1 | 'django.contrib.sessions.middleware.SessionMiddleware' ,
|
INSTALLED_APPS 是包含 1 | 'django.contrib.sessions' ,
|
这些是默认启用的。如果你不用的话,也可以关掉这个以节省一点服务器的开销。 提示:您也可以配置使用比如 cache 来存储 session 在视图中使用 session
request.session 可以在视图中任何地方使用,它类似于python中的字典
session 默认有效时间为两周,可以在 settings.py 中修改默认值:参见这里
1 2 3 4 5 6 | # 创建或修改 session:
request.session[key] = value
# 获取 session:
request.session.get(key,default = None )
# 删除 session
del request.session[key] # 不存在时报错
|
session 例子比如写一个不让用户评论两次的应用: 1 2 3 4 5 6 7 8 9 | from django.http import HttpResponse
def post_comment(request, new_comment):
if request.session.get( 'has_commented' , False ):
return HttpResponse( "You've already commented." )
c = comments.Comment(comment = new_comment)
c.save()
request.session[ 'has_commented' ] = True
return HttpResponse( 'Thanks for your comment!' )
|
一个简化的登陆认证: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def login(request):
m = Member.objects.get(username = request.POST[ 'username' ])
if m.password = = request.POST[ 'password' ]:
request.session[ 'member_id' ] = m. id
return HttpResponse( "You're logged in." )
else :
return HttpResponse( "Your username and password didn't match." )
def logout(request):
try :
del request.session[ 'member_id' ]
except KeyError:
pass
return HttpResponse( "You're logged out." )
|
当登陆时验证用户名和密码,并保存用户id在 session 中,这样就可以在视图中用 request.session['member_id']来检查用户是否登陆,当退出的时候,删除掉它。
|