Как вызвать API Django с помощью Javascript с аутентифицированным пользователем в Django

#javascript #python #django #django-rest-framework #django-templates

Вопрос:

Я использую Django для бэкенда, PostgresSQL в качестве БД и HTML, CSS и Javascript в качестве интерфейса. Я вызываю API Django через Javascript. Где пользователь добавляет товар в корзину, и я вызываю корзину с помощью 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 для вызова API Django

 $(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);
        }
      }
    });
});
 

ТЕПЕРЬ, как показать конкретному пользователю(аутентифицированному пользователю) определенный товар в корзине.

Комментарии:

1. чтобы получить Cart данные конкретного пользователя, вам необходимо ввести request.user свой result = Cart.objects.filter(user=request.user)

2. Здравствуйте @AnkitTiwari, Не могли бы вы, пожалуйста, отобразить подробный код. Это будет оценено по достоинству

3. был ли ваш пользователь аутентифицирован, когда он добавлял товары в корзину ?

4. Да ,в «АДМИНИСТРИРОВАНИИ DJANGO» я вижу корзину с пользователем, идентификатором и выбранным товаром.

5. нет, я имею в виду, когда пользователь добавляет товар в корзину, он вошел в систему или нет

Ответ №1:

вы должны передать идентификатор пользователя при вызове ajax. Если вы используете GET метод, чем передать идентификатор пользователя URL и получить к нему доступ с помощью аргумента в вашем представлении, например.

 $(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 , если пользователь аутентифицирован, чем пользователь войдет, request поэтому, пожалуйста, измените вас views.py , urls.py и ajax URL .