Django:学习笔记(5)——会话
配置中间件
Django中使用会话,需要配置一个中间件。
配置会话引擎
默认情况下,Django在数据库中存储sessions(使用了django.contrib.sessions.models.Sesson模型)。但是你可以选择将其存储在更快的文件系统或缓存中。
我们在这里,使用数据库存储会话数据。配置好中间件后,运行manage.py migrate后会在数据库中创建一张session数据存储表。
使用会话
在Views中使用会话
一旦SessionMiddleware被激活,每一个HttpRequest对象,都有一个session属性,它的基类是SessionBase,我们可以调用它的相关方法来操作会话数据。
不在view中使用会话
如果我们还想在其他地方操作会话,可以直接导入SessionStore,如果使用了基于数据库的会话引擎,直接从对应的包下导入即可,如果配置了其他引擎,可以import_module导入设置文件中配置的会话引擎。
实例:仅允许提交一次
我们设置当用户提交评论后,想再次提交就会收到拒绝信息。
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!')
这个代码写的真的好,在没有设置has_commented为true的时候,默认返回false,直到用户提交成功后,再次访问,此时得到true,返回You've already commented!