了解django doc code- Sessions

时间:2013-01-22 13:46:40

标签: python django web-applications

你好我是一个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!')

我感到困惑的地方在于request.session.get('has_commented',False) 如果用户已注释'has_commented'键设置为true,那么您不会检查'has_commented'是否设置为true以确保用户不发布另一个注释而不是检查'has_commented'是否为false。我的逻辑是不正确的?会话密钥'has_commented'源自哪里?

2 个答案:

答案 0 :(得分:1)

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

'has_commented'密钥来自以下几行:

request.session['has_commented'] = True

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

答案 1 :(得分:1)

函数request.session.get需要2个参数,即

  • 键('has_commented')
  • 默认值(False)

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

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

会话密钥'has_commented'来自以下行:

request.session ['has_commented'] = True