首页 > 解决方案 > 如何在 django-rest-framework 中使用 session_key

问题描述

我正在使用Django-rest-framework

视图.py:

@api_view(['GET'])
def addToCartForSession(request, pk):
    product = get_object_or_404(Product, pk=pk)

    if not request.session.exists(request.session.session_key):
        request.session.create() 

    mycart, __ = Cart.objects.get_or_create(session_key=request.session.session_key)
    mycart.product.add(product)

    return Response({'response':'ok'})

调用此函数时,它会创建一个新密钥。对于新密钥,它会创建一个新的Cart

但是每个用户都应该只有一个购物车。

那么,我怎样才能停止为单个用户创建新的 session_key 呢?但如果没有 session_key,则会创建一个 session_key。我怎样才能做到这一点?

我还想补充一点:

@api_view(['GET'])
def addToCartForSession(request, pk):

    print(request.session.session_key) #>>> None
    return Response({'response':'ok'})

当我做这个时,它会打印None

在我的前端(Reactjs)中:

    addToCart=()=>{
        var id = this.props.id
        
            var url2 = 'http://127.0.0.1:8000/addToCartForSession/'+id+'/'
            fetch(url2,{
                method:'GET',
                headers: {
                    'Content-Type': 'application/json',
                }
            }).then(res=>res.json().then(result=>{
                if(result.response === 'ok'){
                    this.props.dispatch({
                        type: 'itemInCart',
                    })
                    this.setState({addedToCart: true})
                }
            }))
        }
    

这个函数addToCartForSession调用了几次(当我将一个项目添加到购物车时)。只要调用此函数,就会创建新的 session_key/cart。但对于单个用户来说,它只会是一个购物车。

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读