登录,注册,首页,退出

def index_views(request):
    return render(request,'index.html')

# /login 对应的视图
def login_views(request):
    url = '/'
    if request.method == 'GET':
        # get 的流程
        # 判断session中是否有登录信息
        if 'uid' in request.session and 'uphone' in request.session:
            # session中有值,重定向回首页或原路径
            print('session中有数据')
            return redirect(url)
        else:
            # session中没有值
            # 判断cookie中是否有uid和uphone
            if 'uid' in request.COOKIES and 'uphone' in request.COOKIES:
                # cookie 中有登录信息
                # 从cookie中取出数据保存进session
                uid = request.COOKIES['uid']
                uphone = request.COOKIES['uphone']
                request.session['uid']=uid
                request.session['uphone']=uphone
                # 重定向到首页或原路径
                return redirect(url)
            else:
                # cookie 中没有登录信息
                # 去往登录页面
                form = LoginForm()
                return render(request,'login.html',locals())
    else:
        # post 的流程
        # 实现登录操作:取出uphone和upwd到db中判断
        uphone = request.POST['uphone']
        upwd = request.POST['upwd']
        uList = Users.objects.filter(uphone=uphone,upwd=upwd)
        if uList:
            # 登录成功
            uid = uList[0].id
            # 取出 uphone 和 uid 保存进session
            request.session['uid'] = uid
            request.session['uphone'] = uphone
            # 判断是否有记住密码,记住密码的话则将值保存进cookie
            resp = redirect(url)
            if 'isSaved' in request.POST:
                # 记住密码,保存进cookie
                expires = 60 * 60 * 24 * 366
                resp.set_cookie('uid',uid,expires)
                resp.set_cookie('uphone',uphone,expires)
            # 重定向到首页或原路径
            return resp
        else:
            #登录失败 : 回登录页
            form = LoginForm()
            errMsg = "用户名或密码不正确"
            return render(request,'login.html',locals())

# /register 对应的视图
def register_views(request):
    if request.method == 'GET':
        return render(request,'register.html')
    else:
        #实现注册的功能
        dic ={
            "uphone":request.POST['uphone'],
            "upwd":request.POST['upwd'],
            "uname":request.POST['uname'],
            "uemail":request.POST['uemail'],
        }
        #将数据插入进数据库 - 注册
        Users(**dic).save()
        #根据uphone的值再查询数据库
        u = Users.objects.get(uphone=request.POST['uphone'])
        #将用户id和uphone保存进session
        request.session['uid'] = u.id
        request.session['uphone'] = u.uphone

        return redirect('/')

# 检查手机号码是否存在 -> /check_uphone/
def check_uphone_views(request):
    if request.method == 'POST':
        #接收前端传递过来的手机号码
        uphone = request.POST['uphone']
        uList = Users.objects.filter(uphone=uphone)
        if uList:
            # 如果条件为真,则表示手机号码已经存在
            # 响应 status值为0,用于通知客户端手机号码已存在
            # 响应 text值为 “手机号码已存在”
            dic = {
                "status":"0",
                "text":'手机号码已存在',
            }
            return HttpResponse(json.dumps(dic))
        else:
            dic = {
                "status":"1",
                "text":"可以注册",
            }
            return HttpResponse(json.dumps(dic))

# 检查用户是否登录,如果有的话则取出uname的值
def check_login_views(request):
    # 判断 session 中是否有 uid 和 uphone
    if 'uid' in request.session and 'uphone' in request.session:
        # 用户此时处于登录状态
        # 根据 uid 获取 uname 的值
        uid = request.session['uid']
        user = Users.objects.get(id=uid)
        #处理响应数据
        dic = {
            "status":'1',
            'user':json.dumps(user.to_dict())
        }
        return HttpResponse(json.dumps(dic))
    else:
        # 判断cookie是否有登录信息
        if 'uid' in request.COOKIES and 'uphone' in request.COOKIES:
            # 从cookie中取出数据保存进session
            uid = request.COOKIES['uid']
            uphone = request.COOKIES['uphone']
            request.session['uid']=uid
            request.session['uphone']=uphone
            # 根据uid查询处对应的user信息转换成字典,响应给客户端
            user = Users.objects.get(id=uid)
            jsonStr = json.dumps(user.to_dict())

            dic = {
                "status":"1",
                "user":jsonStr,
            }
            return HttpResponse(json.dumps(dic))
        else:
            # session和cookie中都没有登录信息
            dic = {
                "status":0,
                'text':'用户尚未登录'
            }
            return HttpResponse(json.dumps(dic))

# 退出登录
# 清除 session 和 cookie 中的数据
# 原路返回
def logout_views(request):
    #获取请求源地址,如果没有,则返回首页 /
    url = request.META.get('HTTP_REFERER','/')
    resp = redirect(url)
    # 判断 session 中是否有登录信息
    if 'uid' in request.session and 'uphone' in request.session:
        del request.session['uid']
        del request.session['uphone']
    if 'uid' in request.COOKIES and 'uphone' in request.COOKIES:
        resp.delete_cookie('uid')
        resp.delete_cookie('uphone')

    return resp

# 查询出所有的商品类型以及每个类型下的前10个商品
def type_goods_views(request):
    all_list = []
    # 查询所有的商品类型
    types = GoodsType.objects.all()
    for type in types:
        # 将得到的type对象转换成JSON字符串
        type_json = json.dumps(type.to_dict())
        # 获取type下所有的商品(取前10个)
        g_list=type.goods_set.order_by("-price")[0:10]
        # 将前10个商品转换成JSON串
        g_list_json=serializers.serialize('json',g_list)
        # 将type_json 以及 g_list_json 封装到一个字典中,再追加到 all_list列表中
        dic = {
            'type':type_json,
            'goods':g_list_json,
        }

        all_list.append(dic)

    return HttpResponse(json.dumps(all_list))

#添加或更新数量到购物车
def add_cart_views(request):
    #接收数据
    users_id = request.session['uid']
    goods_id = request.GET['goods_id']
    # 接收购买数量,如果没有的话,则默认为1
    ccount = request.GET.get('ccount',1)

    #查看购物车中是否有相同用户购买过相同商品,如果有的话则更新数量,没有的话则新增数据
    cart_list = CartInfo.objects.filter(users_id=users_id,goods_id=goods_id)
    if cart_list:
        #已经有商品,更新购买数量
        cartinfo = cart_list[0]
        cartinfo.ccount = cartinfo.ccount + int(ccount)
        cartinfo.save()
        dic = {
            'status':'1',
            'text':'更新数量成功',
        }
        return HttpResponse(json.dumps(dic))
    else:
        #创建商品并保存进数据库
        cartinfo = CartInfo()
        cartinfo.users_id = users_id
        cartinfo.goods_id = goods_id
        cartinfo.ccount = int(ccount)
        cartinfo.save()
        dic = {
            'status':'1',
            'text':'添加至购物车成功',
        }
        return HttpResponse(json.dumps(dic))


# 查询某用户购物车内的商品数量
def cart_count_views(request):
    if 'uid' not in request.session:
        dic = {
            'count':0
        }
        return HttpResponse(json.dumps(dic))
    else:
        uid = request.session['uid']
        all_cart = CartInfo.objects.filter(users_id=uid)
        total_count = 0
        for cart in all_cart:
            total_count += cart.ccount
        dic = {
            "count":total_count
        }
        return HttpResponse(json.dumps(dic))

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值