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