Do not create cart ID for every shop page visitor

This commit is contained in:
Raphael Michel
2018-03-10 14:04:23 +01:00
parent 6a61a113b0
commit b379c8380d
2 changed files with 20 additions and 10 deletions

View File

@@ -124,8 +124,10 @@ class CartMixin:
if order:
fees = order.fees.all()
else:
elif positions:
fees = get_fees(self.request.event, self.request, total, self.invoice_address, self.cart_session.get('payment'))
else:
fees = []
total += sum([f.value for f in fees])
net_total += sum([f.net_value for f in fees])
@@ -169,14 +171,18 @@ def get_cart(request):
from pretix.presale.views.cart import get_or_create_cart_id
if not hasattr(request, '_cart_cache'):
request._cart_cache = CartPosition.objects.filter(
cart_id=get_or_create_cart_id(request), event=request.event
).order_by(
'item', 'variation'
).select_related(
'item', 'variation', 'subevent', 'subevent__event', 'subevent__event__organizer',
'item__tax_rule'
)
cart_id = get_or_create_cart_id(request, create=False)
if not cart_id:
request._cart_cache = CartPosition.objects.none()
else:
request._cart_cache = CartPosition.objects.filter(
cart_id=cart_id, event=request.event
).order_by(
'item', 'variation'
).select_related(
'item', 'variation', 'subevent', 'subevent__event', 'subevent__event__organizer',
'item__tax_rule'
)
return request._cart_cache

View File

@@ -184,7 +184,7 @@ def create_empty_cart_id(request, replace_current=True):
return new_id
def get_or_create_cart_id(request):
def get_or_create_cart_id(request, create=True):
"""
This method returns the cart ID in use for this request or creates a new cart ID if required.
@@ -232,6 +232,8 @@ def get_or_create_cart_id(request):
This method migrates legacy sessions created before the upgrade to 1.8.0 on a best-effort basis,
meaning that the migration does not respect plugin-specific data and works best if the user only
used the session for one event at the time of migration.
If ``create`` is ``False`` and no session currently exists, ``None`` will be returned.
"""
session_keyname = 'current_cart_event_{}'.format(request.event.pk)
prefix = ''
@@ -254,6 +256,8 @@ def get_or_create_cart_id(request):
if prefix and 'take_cart_id' in request.GET and current_id:
new_id = current_id
else:
if not create:
return None
new_id = generate_cart_id(prefix=prefix)
# Migrate legacy data