#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
.