tangowithcode / tango_with_django_19

A beginners guide to web programming with Python / Django 1.9
Apache License 2.0
207 stars 188 forks source link

10.5 Client Side Cookies `<p>visits: {{ visits }}</p> can't work #44

Open shawshanks opened 8 years ago

shawshanks commented 8 years ago

When I finished 10.5 section and run the server, my Firefox didn't show the number of times of visits on the screen. It just displayed visits:. In other words, I couldn't see the value of {{ visits }} .

While I checked my browser's cookie, it had the value of visists andlast_visit.

The problem confused me. Who can tell me why? I will be appreciated that .

leifos commented 8 years ago

Can you check your spelling of visit.. you have:

visits (in your template)

and visists (in your browser)

Maybe in your view you saw the cookie as “visists” and not “visits”

L

On 9 Nov 2016, at 12:23, yamei notifications@github.com wrote:

When I finished 10.5 section and opened run the server, my Firefox didn't show the number of times of visits on the screen. It just displayed visits:. In other words, I couldn't see the value of {{ visits }} .

While I checked my browser's cookie, it had the value of visists andlast_visit.

The problem confused me. Who can tell me why? I will be appreciated that .

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/leifos/tango_with_django_19/issues/44, or mute the thread https://github.com/notifications/unsubscribe-auth/AB02B6XSoLzZVoHnHq8wC3Ku5mkCmF0nks5q8bs6gaJpZM4KtekA.

shawshanks commented 8 years ago

@leifos Very thank you. But it's the typo of this Issue rather than code and I had corrected it.

Here is what I did next:

Just now I finished 10.6 Session Data. According to the tutorial, I edited views and cleared my browser's cookie entirely. And then I run the server, the browser got the correct value of visits. During the process, I didn't change the template of index.html.

After that, I carefully modified my view.py and made it returned to section 10.5 Client Side Cookies . But it also didn't work (as same as last time). My code is as follows:

def visitor_cookie_handler(request, response):
    visits = int(request.COOKIES.get('visits', '1'))

    last_visit_cookie = request.COOKIES.get('last_visit', str(datetime.now()))
    last_visit_time = datetime.strptime(last_visit_cookie[:-7], '%Y-%m-%d %H:%M:%S')

    # If it's been more than a day since the last visit..
    if (datetime.now() - last_visit_time).seconds > 1:
        visits = visits + 1
        # update the last visit cookie now that we have updated the count
        response.set_cookie('last_visit', str(datetime.now()))
    else:
        visits = 1
        # set the last visit cookie
        response.set_cookie('last_visit', last_visit_cookie)

    # Update/set the visits cookie
    response.set_cookie('visits', visits)

def index(request):
    category_list = Category.objects.order_by('-likes')[:5]
    page_list = Page.objects.order_by('-views')[:5]
    context_dict = {'categories': category_list, 'pages': page_list}

    response = render(request, 'rango/index.html', context_dict)
    visitor_cookie_handler(request, response)
    return response
    <p>Visits: {{ visits }}</p>
    <p>last_visit: {{ last_visit }}</p>
leifos commented 8 years ago

Hmm.. I suspect that the visitor_cookie_handler() method needs to return the response object to index(), and then index needs to return that.

maxwelld90 commented 7 years ago

Has this been resolved? What action should we take here?

NinjaOnRails commented 7 years ago

Has anyone fixed this? I got mine to work, but as soon as I sign out and sign back in, the counter starts from 1 again.