django - 如何在 Django 中增加会话内部?
问题描述
我尝试在会话内创建一个计数器,但我失败了。会话打印出我添加一次的结果,当我想再次添加新评论时,它不会增加进程。评论将被添加,但计数器仍然等于一,所以我怎样才能增加会话:
def post(self, request, user_slug, *args, **kwargs):
my_question = UserAsking.objects.get(ask_slug=user_slug)
userprof = UserProfile.objects.get(userasking__ask_slug=user_slug)
comment_form = CommentForm(request.POST, instance=request.user)
name = "%s %s" % (self.request.user.first_name, self.request.user.last_name)
username = self.request.user.username
logo = self.request.user.userprofile.logo.url
if comment_form.is_valid():
comment_request = self.request.POST.get('comment', None)
comment_form = Comment.objects.create(comment=comment_request,
userasking_id=my_question.id,
userprofile_id=userprof.id,
name=name,
username=username,
logo=logo,
comment_slug=my_question.ask_slug
)
q = UserAsking.objects.get(ask_slug=my_question.ask_slug)
c = comment_form
u = comment_form.userprofile
if 'notify_counts' in request.session:
counter = request.session.get('notify_counts', 0)
request.session['notify_counts'] = counter + 1
request.session.save()
print('%s is commented your post: %s and comment is (%s) notify = %i'
%(u, q, c, counter))
return redirect('community:question_view', user_slug)
# return redirect('community:question_view', comment_form.userasking.ask_slug)
return render(request, 'community/question_view.html', {'comment_form': comment_form})
解决方案
Django 会在 session 被修改后自动保存到 session 数据库中,所以你不用手动保存,看看:<em>什么时候保存 session [Django-Doc]。
def post(request,...):
...
notify_counts = request.session.get('notify_counts')
if notify_counts is None:
request.session['notify_counts'] = 1
else:
request.session['notify_counts'] +=1
你也可以使用try...except
如下模式:</p>
def post(request, ...):
try:
request.session['notify_counts'] +=1
except KeyError:
request.session['notify_counts'] = 1
推荐阅读
- java - 如何用 Eclipse 运行 testng 工厂?
- swift - 从 Swift 将浮点数或颜色传递给 Metal 片段着色器
- java - 我是否必须将类扩展到 ConcurrentHashMap 或者我可以为 threadSafety 设置变量 ConcurrentHashMap
- laravel - Laravel 5.7 用户验证电子邮件未在注册时发送
- python - Homebrew vim 和 Numpy 不再支持选项了?
- ibm-cloud - 如何将 IBM Watson Assistant 与 Watson Discovery 链接
- python - 范围问题:函数中的变量不能用作其他函数的参数?
- bash - MacOS shell脚本基于标签移动文件
- python - 在 Google Colab 中排列表单字段
- angular - 计算输入的 Angular ExpressionChanged 错误