如何在 Django 中使用 Javascript 和经过身份验证的用户调用 Django API

Posted

技术标签:

【中文标题】如何在 Django 中使用 Javascript 和经过身份验证的用户调用 Django API【英文标题】:How to call Django API with Javascript with Authenticated user in Django 【发布时间】:2021-08-31 05:07:29 【问题描述】:

我使用 Django 作为后端,PostgresSQL 作为 DB 和 html,CSS 和 javascript 作为前端。我通过 Javascript 调用 Django API。用户将产品添加到购物车的位置,我使用 DRF 调用购物车以向用户显示所有数据。但问题是,用户可以看到其他用户的所有数据。那么,经过身份验证的用户如何才能在购物车上看到他/她选择的产品。

下面是详细代码:

views.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)

serializer.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);
        
      
    );
);

现在,如何在特定购物车项目中显示特定用户(经过身份验证的用户)。

【问题讨论】:

要获取特定用户的Cart 数据,您必须在result = Cart.objects.filter(user=request.user) 中传递request.user 你好@AnkitTiwari,你能显示详细代码吗?将不胜感激 您的用户在将产品添加到购物车时是否经过身份验证? 是的,在“DJANGO ADMINISTRATION”中,我可以看到有用户、ID 和所选产品的购物车。 不,我的意思是当用户将产品添加到购物车时,他是否已登录 【参考方案1】:

调用 ajax 时必须传递用户 ID。 如果您使用 GETmethod 而不是在 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')
]

更新

如果用户通过身份验证,则无需在 ajax URL 中传递用户 ID,而不是用户将进入 request 所以请更换你的views.pyurls.pyajax URL

【讨论】:

以上是关于如何在 Django 中使用 Javascript 和经过身份验证的用户调用 Django API的主要内容,如果未能解决你的问题,请参考以下文章