Как исправить 500 внутреннюю ошибку сервера при использовании Django и React
Я пытаюсь создать простую корзину с помощью django и react. Когда я нажимаю на кнопку добавления в корзину, я получаю 500 Internal Server Error
от react. Ошибка, которую он выдает в django, следующая:
ValueError: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x00000268F76AEFA0>": "order_product.user" must be a "User" instance.
Я перепробовал все известные мне способы, но так и не смог ее исправить. Ниже приведена программа:
DJANGO
urls.py
path('add-to-cart/', add_to_cart_view.as_view(), name='add-to-cart'),
views.py
class add_to_cart_view(APIView):
permission_classes = []
def post(self, request, *args, **kwargs):
id = request.data.get('id', None)
if id is None:
return Response({"message": "Invalid request"}, status=HTTP_400_BAD_REQUEST)
product = get_object_or_404(Product, id=id)
requested_product = order_product.objects.create(
product=product,
user=request.user,
ordered=False
)
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
if not order.products.filter(product__id=requested_product.id).exists():
order.products.add(requested_product)
return Response(status=HTTP_200_OK)
else:
ordered_date = timezone.now()
order = Order.objects.create(
user=request.user, ordered_date=ordered_date)
order.products.add(order_product)
return Response(status=HTTP_200_OK)
REACT
export const AddToCartURL = "http://127.0.0.1:8000";
const handleAddToCartURL = async (id) => {
try {
const res = await axios.post(`${AddToCartURL}/add-to-cart/`, {id});
setProduct(res.data);
console.log(res.data)
}
catch (err) {
}
};
return(
<Box sx={{ flexGrow: 1 }} m={4}>
<Grid container spacing={3}>
<Grid item xs={9}>
<Item>
<img src={product.image} alt="" />
<div>
<p>{product.description}</p>
<p>{product.label}</p>
<p>{product.price}</p>
</div>
<button color='primary' onClick={() => handleAddToCartURL(product.id)}>
<AddShoppingCartIcon />
</button>
</Item>
</Grid>
<Grid item xs>
<Item>Similar Products</Item>
</Grid>
</Grid>
</Box>
)
}
export default ProductDetails
Я действительно не понимаю, почему он возвращает анонимного пользователя из django. Пожалуйста, как мне это исправить?
У вас возникла эта ошибка, потому что пользователь, которого вы пытаетесь назначить, не аутентифицирован. Добавьте разрешение к вашему представлению следующим образом :
from rest_framework import permissions
class add_to_cart_view(APIView):
permission_classes = [permissions.IsAuthenticated]
# Rest of the code here
NB : Вам необходимо аутентифицировать пользователя перед тем, как сделать запрос на отправку сообщения.
UPDATE : Если вы хотите протестировать с не аутентифицированным пользователем. Вы можете создать общего пользователя для этого :
# Create a user with a name unauthenticated_user in the admin
# In the view :
if request.user.is_authenticated:
# Do something for authenticated users.
# Your code previous code here
else:
# retrieve the unauthenticated_user you create
# use your custom user here