为了账号安全,请及时绑定邮箱和手机立即绑定

Django:在用户登录或注册后存储价值

Django:在用户登录或注册后存储价值

12345678_0001 2021-09-28 15:28:49
我需要在用户启动会话时创建一个随机值,并在用户登录或注册后存储它。必须在用户注销后删除。我正在使用session.session_key,但可以是任何其他随机值。为什么session.session_key?因为它会在用户进入网站时自动生成。当用户进入网站,他们可以add items给他们的shopping cart,但不能购买到logs in或signs up。所有的cart_items 都使用random valuea token,所以如果我可以在用户登录或注册后保存这个值,我可以查询已经保存在数据库中的cart_items 并恢复用户已经放入这个的项目shopping cart。因此,当用户输入时,session.session_key会创建一个新用户,但在创建用户logs in或signs up其他用户之后session.session_key。使得无法使用此值在用户not logged in和user logged in.我的逻辑:1.- 保存session.session_key在 Cookie 中。2.- 在用户登录或注册后session.session_key创建一个新的。我们需要session.session_key用保存在 Cookie 中的来替换这个新的。3.-session.session_key查询所有使用此值作为 ID 创建的对象并做一些事情。代码:使用此函数生成需要存储的购物车 ID:def _cart_id(request):    cart = request.session.session_key    if not cart:        request.session.create()          cart = request.session.session_key    return cart  # Ultimately return cart注册视图:@transaction.atomicdef signupView(request):    if request.method == 'POST':      ...do stuff ...    ### Save cart id in Cookie before authenticating            set_cookie_values(request)    ### Authentication            user = authenticate(username=username, password=raw_password)            login(request, user)            ### Get cart id from Cookie            cart = request.COOKIES.get('cart', '')            delete_cookie_values(request)            return redirect('cart:cart_detail')    else:        profile_form = ProfileForm(district_list, province_list, department_list)    return render(request, 'accounts/signup.html', {        'user_form': user_form,        'profile_form': profile_form})帮助存储和删除 Cookie 中的值:def set_cookie_values(request):    try:        cart_id =_cart_id(request)        response = HttpResponse()        response.set_cookie('cart_id', cart_id, max_age=9999999999)    except ObjectDoesNotExist:        pass    return responsedef delete_cookie_values(request):    response = HttpResponse()    response.delete_cookie('cart_id')    return response我很感激你的帮助,看看我在 Cookie 上存储 car_id 的伪代码并检索它。
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

你做错了事情。用户登录时会更新会话密钥,但会保留会话的内容。所以你应该做的是给购物车一个单独的随机 ID,并将其存储在会话中。


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号