Как ограничить создание корзины только (определенным URL) "/api/cart/" URL?
Следующий класс был разработан для создания корзины и добавления в нее товаров
class CartAPIView(TokenMixin, CartUpdateAPIMixin, APIView):
cart = None
# get the cart from token otherwise create new cart
def get_cart(self):
# if the token exist get it from the request
token_data = self.request.GET.get('token')
# create dummy cart object
cart_obj = None
# if the get request has token, decode it, get cart_id, return cart object
if token_data:
# token_dict = ast.literal_eval(base64.standard_b64decode(token_data.encode("utf-8")).decode("utf-8"))
token_dict = self.parse_token(token=token_data)
cart_id = token_dict.get("cart_id")
print(cart_id)
try:
cart_obj = Cart.objects.get(id=cart_id)
except:
pass
self.token = token_data
# If no cart passed in the request it will create new cart object
if cart_obj == None:
cart = Cart()
cart.tax_percentage = 0.075
if self.request.user.is_authenticated:
cart.user = self.request.user
cart.save()
data = {
"cart_id": cart.id,
}
# use the create_token from the mixins to create the token for the new cart
self.create_token(data)
cart_obj = cart
return cart_obj
# The entry point for /cart/ API to create & update cart
def get(self, request, format=None):
# First either i will get the cart data or i wil create new one
cart = self.get_cart()
self.cart = cart
# if the get call has cart and has item it will update the cart
self.update_cart()
# getting the cart items through serializer
items = CartItemSerializer(cart.cartitem_set.all(), many=True)
data = {
"token": self.token,
"cart" : cart.id,
"count": cart.items.count(),
"items": items.data,
"total": cart.total,
"subtotal": cart.subtotal,
"tax_total": cart.tax_total,
}
return Response(data)
Урлы, используемые для обслуживания корзины, следующие
создайте новую корзину /api/cart/
получить информацию о корзине /api/cart/?token=eydjYXJ0X2lkJzogMTh9
добавьте товар вместе с количеством /api/cart/?token=eydjYXJ0X2lkJzogMTh9&item=3&qty=10
удалить товар из корзины /api/cart/?token=eydjYXJ0X2lkJzogMTh9&item=3&qty=10&delete=true
URL.py
urlpatterns = [
path('admin/', admin.site.urls),
# Django debug tool bar
path('__debug__/', include(debug_toolbar.urls)),
# JWT Token => Login API
path('api/user/login/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api-auth/', include('rest_framework.urls')),
# Categories APIs
path('api/categories/', CategoryListAPIView.as_view(), name="categories_list"),
path('api/categories/<int:pk>/', CategoryRetrieveAPIView.as_view(), name="category_details"),
# Products APIs
path('api/products/', ProductListAPIView.as_view(), name="products_list"),
path('api/products/<int:pk>/', ProductRetrieveAPIView.as_view(), name="product_details"),
# API for guest checkout who has email only
path('api/user/checkout/', UserCheckoutAPI.as_view(), name="user_checkout_api"),
# Cart
path('api/cart/', CartAPIView.as_view(), name="cart_api"),
# Checkout
path('api/checkout/', CheckoutAPIView.as_view(), name="checkout_api"),
]
Проблема в том, что
Если кто-то попал в корзину с любыми параметрами URL, функция get_cart создаст новую корзину по умолчанию например, если кто-то попадет в корзину со следующим URL /api/cart/?cart_id=blabla
Функция get cart создаст новую корзину
Вопрос в том, что
Как ограничить создание корзины только URL "/api/cart/" с сохранением других допустимых параметров "token", "qty", и "delete"
Заранее спасибо