【问题标题】:Problems using session based cookies in Django在 Django 中使用基于会话的 cookie 的问题
【发布时间】:2014-03-15 10:19:23
【问题描述】:

我正在编写 Tango With Django 教程,我正在尝试使用基于会话的 cookie 来计算用户访问网站的次数。当用户访问关于页面时,他们应该会看到一条消息,告诉他们访问该网站的频率。首先,我确保 django.contrib.sessions 列在 settings.py 中的 INSTALLED_APPS 下。

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.admindocs',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rango',
)

然后我运行了“python manage.py syncdb”。我的会话在 views.py 中处理,如下所示:

def index(request):
  context_dict = {}

  category_list = Category.objects.order_by('-likes')[:5]
  category_list = remove_spaces(category_list)
  context_dict['categories'] = category_list

  page_list = Page.objects.order_by('-views')[:5]
  context_dict['pages'] = page_list

  # Deal with cookies
  if request.session.get('last_visit'):
    last_visit_time = request.session.get('last_visit')
    visits = request.session.get('visits', 0)

    # Use seconds instead of days for testing
    if (datetime.now() - datetime.strptime(last_visit_time[:-7]), "%Y-%m-%d %H:%M:%S").seconds > 5:
      request.session['visits'] = visits + 1
      request.session['last_visit'] = str(datetime.now())
    else:
      request.session['last_visit'] = str(datetime.now())
      request.session['visits'] = 1

  return render(request, 'rango/index.html', context_dict)

def about(request):
  if request.session.get('visits'):
    count = request.session.get('visits')
  else:
    count = 0

  context_dict = {'boldmessage': 'here is the about page','visits': count}
  return render(request, 'rango/about.html', context_dict)

这是我的关于模板:

<!DOCTYPE html>

<html>
  {% extends 'rango/base.html' %}

  {% load static %}

  {% block title %}About{% endblock %}

  {% block body_block %}
    <h1>Rango says...</h1>
    <strong>{{ boldmessage }}</strong>
    <h3>You have visited this site {{ visits }} times</h3>
    <img src="{% static 'icon_12544.png' %}" alt="Diving helmet" />
  {% endblock %}

</html>

每当我访问该页面时,我只看到用户访问了该站点 0 次。任何想法我做错了什么?

【问题讨论】:

    标签: python django session cookies


    【解决方案1】:

    你已经接近了。当您检查会话 cookie 的存在时,索引视图对许多人来说只有一级缩进:

    def index(request):
      context_dict = {}
    
      category_list = Category.objects.order_by('-likes')[:5]
      category_list = remove_spaces(category_list)
      context_dict['categories'] = category_list
    
      page_list = Page.objects.order_by('-views')[:5]
      context_dict['pages'] = page_list
    
      # Deal with cookies
      if request.session.get('last_visit'):
        last_visit_time = request.session.get('last_visit')
        visits = request.session.get('visits', 0)
    
        # Use seconds instead of days for testing
        if (datetime.now() - datetime.strptime(last_visit_time[:-7]), "%Y-%m-%d %H:%M:%S").seconds > 5:
          request.session['visits'] = visits + 1
          request.session['last_visit'] = str(datetime.now())
      else:
        # this code was never reached, so the session was not being set
        request.session['last_visit'] = str(datetime.now())
        request.session['visits'] = 1
    
      return render(request, 'rango/index.html', context_dict)
    

    【讨论】:

    • 噢!我在第二个 if 语句中的日期时间函数也有错误:if (datetime.now() - datetime.strptime(last_visit_time[:-7], "%Y-%m-%d %H:%M:%S")).days &gt; 0
    猜你喜欢
    • 2011-04-11
    • 2014-07-31
    • 2023-04-04
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多