[英]How to call Django API with Javascript with Authenticated user in Django
我使用 Django 作為后端,PostgresSQL 作為數據庫,HTML、CSS 和 Z9E13B69D1D2DAACAAAF7Z1 作為前端。 我通過 Javascript 打電話給 Django API。 用戶將產品添加到購物車的位置,我使用 DRF 調用購物車以向用戶顯示所有數據。 但問題是,用戶可以看到其他用戶的所有數據。 那么,經過身份驗證的用戶如何才能在購物車上看到他/她選擇的產品。
這是一個詳細的代碼:
視圖.py
adding product to cart
def addProduct(request):
user = request.user
product_id = request.GET.get('product_id')
product_cart = Product.objects.get(id=product_id)
Cart(user=user, product=product_cart).save()
return render(request, 'cart/addtocart.html')
Api 查看 (views.py)
@api_view(['GET'])
def showproduct(request):
if request.method == 'GET':
result = Cart.objects.all()
serialize = productserializers(result, many = True)
return Response(serialize.data)
序列化程序.py
from .models import *
from rest_framework import serializers
class productserializers(serializers.ModelSerializer):
class Meta:
model = Cart
fields = '__all__'
depth = 1
Javascript 調用 Django API
$(document).ready(function() {
$.ajax({
url: 'http://127.0.0.1:8000/showproduct/',
dataType: 'JSON',
success: function(data){
for (var i = 0; i < data.length; i++)
{
var row =
$('<tr> .. ..........</tr>');
$("#table").append(row);
}
}
});
});
現在,如何在特定購物車項目中顯示特定用戶(經過身份驗證的用戶)。
當您調用 ajax 時,您必須傳遞用戶 ID。 如果您使用GET
方法而不是在URL
中傳遞用戶 ID,並通過視圖中的參數訪問它,例如。
$(document).ready(function() {
$.ajax({
url: '{% url "showdata" %}',
dataType: 'JSON',
success: function(data){
for (var i = 0; i < data.length; i++)
{
var row =
$('<tr> .. ..........</tr>');
$("#table").append(row);
}
}
});
});
在你的views.py
中
@api_view(['GET'])
def showproduct(request):
if request.method == 'GET':
result = Cart.objects.filter(user=request.user)
serialize = productserializers(result, many = True)
return Response(serialize.data)
並將其添加到您的urls.py
urlpatterns = [
path("showdata/", views.showproduct, name='showdata')
]
更新
there is no need to pass user id in ajax URL
if user is authenticated than user will come in request
so please change you views.py
, urls.py
and ajax URL
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.