如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript(或类似的)在 Django 模板中切片列表项

如何在 Django 模板上传递 Python 列表并在 JavaScript 中使用它?

如何在 django 中使用 Javascript 获取跨域数据?

使用 Django,如何在我的 javascript 中检测到管理员?

如何使用Django模板在javascript中访问ajax jquery中的模板变量

上传文件后,如何在 Django 中使用 AJAX 更新表(与 JavaScript 链接)?