Search code examples
pythondjangocookiesdjango-viewsdjango-cookies

Why don't cookies work properly in Django?


I have to set cookies to save cart details in my project but its not working, when i test cookies using function

request.session.set_test_cookie()

Then it set cookies but response.set_cookie function is not setting cookies. I have tried this code.

def index(request):
    if request.method == 'GET':
        response = HttpResponse('hello')
        days_expire = 7
        max_age = days_expire * 24 * 60 * 60 
        response.set_cookie('my_cookie', 'Product Cart', max_age=max_age)
        return render(request, 'home/index.py')

and for getting cookis , this code is being used

def sport(request):
    if request.method == 'GET':
        if 'my_cookie' in request.COOKIES:
            value = request.COOKIES['my_cookie']
            return HttpResponse(value)
        else:
            return HttpResponse('Cookie not set')

It always prints cookie not set string, What can be the reason behind it.


Solution

  • You are creating two different HttpResponse instances: one manually and the other one is created by the render() call and returned from the view. You should save the result the of the render() call and set the cookie there:

    response = render(request, 'home/index.py')
    response.set_cookie('my_cookie', 'Product Cart', max_age=max_age)
    return response
    

    You should also consider:

    • Using an extenstion different from .py for your templates. They might get confused with Python code files.
    • Using sessions for your shipping card.