1

您好,我是 django/python 新手,需要一些帮助来理解下面的代码。

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!')

我感到困惑的是 if request.session.get('has_commented',False) 如果用户评论了'has_commented'键设置为true,那么你不会检查'has_commented'是否设置为true确保用户不发表另一条评论,而不是检查“has_commented”是否为假。我的逻辑不正确吗?会话密钥“has_commented”来自哪里?

4

2 回答 2

1

当您调用 时request.session.get('has_commented', False),您是在询问“会话密钥是否'has_commented'已设置为 true?如果是,则返回该值。如果不是,则返回 false。” 因此,如果有人尚未发表评论,它将返回False并继续执行其余代码。

'has_commented'关键来自以下几行:

request.session['has_commented'] = True

'has_commented'一旦有人发表评论,这会将密钥设置为 true。

于 2013-01-22T13:54:54.550 回答
1

函数 request.session.get 有两个参数,即

  • 关键('has_commented')
  • 默认(假)

该函数将尝试为该键返回一个值,但如果该键不存在,或者该值为 NULL,则将返回默认值。

换句话说,如果 'has_commented' 的值为 True,则 if 语句将运行。但是,如果会话中没有 'has_comment' 键,request.session.get 将返回默认值 False 并且 if 语句将不会运行。

会话密钥“has_commented”源自以下行:

request.session['has_commented'] = True

于 2013-01-22T14:04:31.613 回答