【问题标题】:How to fix 500 internal server error while using Django and React如何在使用 Django 和 React 时修复 500 内部服务器错误
【发布时间】:2021-12-20 20:18:54
【问题描述】:

我正在尝试使用 django 创建一个简单的购物车并做出反应。当我单击添加到购物车按钮时,我从反应中得到500 Internal Server Error。它在 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 返回匿名用户。请问如何解决?

【问题讨论】:

    标签: javascript python reactjs django


    【解决方案1】:

    您遇到此错误是因为您尝试分配的用户未通过身份验证。 像这样向您的视图添加权限:

    from rest_framework import permissions
    
    class add_to_cart_view(APIView):
        permission_classes = [permissions.IsAuthenticated]
        
        # Rest of the code here
    

    注意:您需要先对用户进行身份验证,然后才能发出发布请求。

    更新:如果您想使用未经身份验证的用户进行测试。 您可以为此创建一个通用用户:

    # 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
    

    【讨论】:

    • 谢谢@Rvector。拜托,我想知道:我是否无法在没有身份验证的情况下测试 add to cart url 功能。我问是因为我还没有在 react 应用程序中设置身份验证。
    • 当然可以。您可以创建一个通用用户。如果用户未通过身份验证,则设置它
    • 谢谢。我不知道如何实现它
    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多