Con*_*ion 9 django django-authentication django-sessions
对于我的网站,几乎每个页面都有一个标题栏显示"欢迎,ABC",其中"ABC"是用户名.这意味着request.user将为每一个请求调用,导致数据库一次又一次地命中.
但是一旦用户登录,我应该能够将他的user实例存储在他的cookie中并加密它.这样我可以避免重复访问数据库,而只是request.user从cookie中检索.
你会如何修改Django来做到这一点?是否有任何Django插件可以满足我的需求?
谢谢
这有过度优化的味道。从数据库中获取用户是每个请求的一次点击,如果您也使用 Profile 模型,则可能是两次。如果您的网站是这样的,额外的两个查询会对性能产生很大的影响,那么您可能会遇到更大的问题。
您想要使用会话中间件,并且需要阅读文档。会话中间件支持多种会话引擎。理想情况下,您可以使用 memcached 或 redis,但您可以编写自己的会话引擎来将所有数据存储在用户的 cookie 中。启用中间件后,它就可以作为请求对象的一部分使用。您与 进行交互request.session,它的作用就像一个字典,使其易于使用。以下是文档中的几个示例:
这个简单的视图在用户发表评论后将 has_commented 变量设置为 True。它不允许用户多次发表评论:
\n\ndef post_comment(request, new_comment):\n if request.session.get(\'has_commented\', False):\n return HttpResponse("You\'ve already commented.")\n c = comments.Comment(comment=new_comment)\n c.save()\n request.session[\'has_commented\'] = True\n return HttpResponse(\'Thanks for your comment!\')\nRun Code Online (Sandbox Code Playgroud)\n\n这个简单的视图记录了网站的“成员”:
\n\ndef login(request):\n m = Member.objects.get(username=request.POST[\'username\'])\n if m.password == request.POST[\'password\']:\n request.session[\'member_id\'] = m.id\n return HttpResponse("You\'re logged in.")\n else:\n return HttpResponse("Your username and password didn\'t match.")\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2093 次 |
| 最近记录: |