【发布时间】:2021-12-01 07:42:56
【问题描述】:
我正在构建一个电子商务网站,为了实现 add_to_cart 功能,我做了以下操作。
点击添加到购物车按钮调用我写的javascriptadd_to_cart函数:
<button type="button" onclick = "add_to_cart({{ product.pk }})">Add to Cart</button>
这是函数:
function add_to_cart(product_pk) {
let url = '/add-to-cart/' + product_pk.toString()
$.ajax({
type: 'GET',
url: url,
processData: false,
contentType: false
})
}
这个网址看起来像这样:
path('add-to-cart/<str:product_pk>', views.add_to_cart, name='add_to_cart')
最后我的视图是这样的:
def add_to_cart(request, product_pk):
cart = request.session['cart']
cart.append(product_pk)
request.session['cart'] = cart
context = {'length_of_cart': len(cart)}
return HttpResponse(content = dumps(context), content_type='application/json')
tldr:点击按钮,按钮调用js,js向url发出get请求,url触发view,view中的逻辑将商品加入购物车。
我觉得这很“hacky”。我在这里所做的是否涉及任何安全问题?
【问题讨论】:
-
导致副作用的事情应该通过 POST 请求完成,并使用 CSRF 令牌。
-
@WillemVanOnsem 是的,我也是这么想的。像这样做会有什么问题?感觉好像我在发出帖子请求而不发出帖子请求......