如何在 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。
如果您使用 GET
method 而不是在 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.py
、urls.py
和ajax URL
。
【讨论】:
以上是关于如何在 Django 中使用 Javascript 和经过身份验证的用户调用 Django API的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript(或类似的)在 Django 模板中切片列表项
如何在 Django 模板上传递 Python 列表并在 JavaScript 中使用它?
如何在 django 中使用 Javascript 获取跨域数据?
使用 Django,如何在我的 javascript 中检测到管理员?