python - 了解 django 文档代码 - session

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

我感到困惑的是 if request.session.get('has_commented',False) 如果用户发表了评论,则“has_commented”键设置为 true,那么您是否会检查“has_commented”是否设置为 true 以确保用户不会发布其他评论,而不是检查“has_commented”是否为 false。我的逻辑不正确吗?另外, session key “has_commented”来自哪里?

最佳答案

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

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

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

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

session key “has_commented”源自以下行:

request.session['has_commented'] = True

关于python - 了解 django 文档代码 - session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460042/

相关文章:

javascript - Fit Screen Android WebApp(避免水平滚动)

python - 非单例集合的热切加载

python - 即使类被重命名,web.py 也会加载页面

django - 如何在Heroku上运行Django测试

python - Django:为什么 'Class' 对象不可迭代

azure - 在Azure Web应用程序中运行docker容器: didn't respond to HTTP pings on port

python - Python中数字向量或数字列表的平均值

python - csv 类编写器 : a bytes-like object is required, 不是 'str'

django - 模板不存在

tomcat多次部署webapp