Djano и Telegram Web App передача переменной из JS на сервер

Все данные телеграм передает через свой скрипт JS. Реализую покупку товаров и не могу получить telegram ID пользователя перед формированием корзины.

Ниже код добавления товара в корзину, он работает

urls.py

path('add_to_cart', views.add_to_cart, name="add")

Скрипт передающий данные во вью джанги

let tg = window.Telegram.WebApp;
let user_id = tg.initDataUnsafe.user.id

btns.forEach(btn=>{
    btn.addEventListener("click", addToCart)
})

function addToCart(e){
    let product_id = e.target.value
    let url = "/add_to_cart"

    let data = {id: product_id, user_id: user_id}

    fetch(url, {
        method: "POST",
        headers: {
            "Comtent-Type": "application/json",
            'X-CSRFToken': csrftoken,
        },
        body: JSON.stringify(data)
    })
    .then(res=>res.json())
    .then(data=>{
        console.log(data)
    })
    .catch(error=>{
        console.log(error)
    })
}

views.py

def add_to_cart(request):
    # Получаем и парсим
    data = json.loads(request.body)
    product_id = data["id"]
    user_id = data["user_id"]

    # Регистрируем id пользователя телеграмма
    Botuser.objects.get_or_create(user_id=user_id)

    # Получаем продукт и сохраняем
    product = Product.objects.get(pk=product_id)
    cart, created = Cart.objects.get_or_create(user_id=user_id, complited=False)
    cartitem, created = CartItem.objects.get_or_create(cart=cart, product=product)
    cartitem.quantity += 1
    cartitem.save()
    return JsonResponse(product.price, safe=False) 

Проблема при формировании корзины, так как сперва надо получить id пользователя и потом на основании его сделать выборку товаров которых он заказал. Как и получить POST и отрендерить страницу на одном url

view корзины

def cart(request):
    cart = None
    cartitems = []

    data = json.loads(request.body)   
    cart, created = Cart.objects.get_or_create(user_id=data["user_id"], complited=False)
    cartitems = cart.cartitems.all()
    context = {"cart": cart, "items": cartitems}
    return render(request, "cart.html")

Это вью не работает, так как либо рендерит либо работает с json


Ответы (0 шт):