python - 如何在 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。但对于单个用户来说,它只会是一个购物车。
解决方案
推荐阅读
- ruby-on-rails - 尝试捆绑安装 ruby 新生成的项目时出错
- javascript - || 运算符在 EJS 中未按预期工作
- c# - 为什么我的测试没有通过空列表?
- stackblitz - stackblitz 中不满意的版本(jspdf)
- python - 更改现有项目的 url。并重定向到新的 url
- c++ - 'TableCache' 的离线定义与 'leveldb::TableCache' 中的任何声明都不匹配
- amazon-web-services - AWS Auto-Scaling 测试
- html - 引导下拉菜单选择按钮确认
- maven - Zeppelin 不加载 maven jar
- c++ - 罗马数字到阿拉伯语(vinculum) - 读取字符串中的字符