I want 1 session for 1 anonymous user. The thing is, every time I enter cart endpoint, session does not save. Cookie sessionid is creating only when I log in to admin panel.
# views.py in cart app
def get_or_create_cart(request):
if request.user.is_authenticated:
token, created = Token.objects.get_or_create(user=request.user)
cart, _ = Cart.objects.get_or_create(user_token=token)
else:
if not request.session.session_key:
request.session.create()
session_key = request.session.session_key
print(session_key)
cart, _ = Cart.objects.get_or_create(session_key=session_key)
cart.session_key = session_key
cart.save()
return cart
@api_view(['GET', 'POST', 'PUT', 'DELETE'])
def cart_view(request):
cart = get_or_create_cart(request)
if request.method == 'GET':
cart_items = CartItem.objects.filter(cart=cart)
serializer = CartItemSerializer(cart_items, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
...
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
}
SESSION_ENGINE = "django.contrib.sessions.backends.db"
SESSION_COOKIE_NAME = "sessionid"
SESSION_COOKIE_SECURE = False
SESSION_SAVE_EVERY_REQUEST = True```