02-登录功能的实现

一 登录页面的设计

  • views中先定义login构造登录上下文

  • views中定义login_handle对登录传入的数据做处理及设置cookie值等功能

     views.py
     def login(request):
         uname = request.COOKIES.get('uname','')
         context = {'title':'用户登录','erorr_name':0,'error pwd ':0,'uname':uname}
         return  render(request,'df_user/login.html',context)
    
    
     def login_handle(request):
         # 接收请求信息
         get = request.POST
         uname = get.get('username')
         upwd = get.get('pwd')
         jizhu = get.get('jizhu', 0)
         # 根据用户名查询对象
         users = UserInfo.objects.filter(uname=uname)
         # print uname
         # 判断如果未查到则用户名错,查到再判断密码是否正确,正确则转到用户中心
         if len(users) == 1:
             s1 = sha1()
             s1.update(upwd.encode('utf8'))
             #登录带cookie值   必须 red = HttpResponseRedirect    red.set_cookie  renturn red
             if s1.hexdigest() == users[0].upwd:
                 red = HttpResponseRedirect('/user/info')
                 # count = CartInfo.objects.filter(user_id=users[0].id).count()
    
                 # print '*'*10
                 # print count
                 # 记住用户名
                 if jizhu != 0:
                     red.set_cookie('uname', uname)
                 else:
                     red.set_cookie('uname', '', max_age=-1)
                 request.session['user_id'] = users[0].id
                 request.session['user_name'] = uname
                 # request.session['count'] = count
                 return red
             else:
                 context = {'title': '用户登录', 'error_name': 0, 'error_pwd': 1, 'uname': uname}
                 return render(request, 'df_user/login.html', context)
         else:
             context = {'title': '用户登录', 'error_name': 1, 'error_pwd': 0, 'uname': uname }
             return render(request, 'df_user/login.html', context)
    

二 设计登录后的用户info页面

  • info的页面要显示邮箱,用户姓名,等信息,所以在views中的info构造context上下文
  • 构造用户的收货地址,这里需要用户全部信息,save保存后把数据进行传输。
  • 设计注销用户的功能,这里清除cookie
views.py
def logout(request):
      request.session.flush()
      return redirect('/')
 
def site(request):
    user = UserInfo.objects.get(id=request.session['user_id'])
    if request.method == 'POST':
        post = request.POST
        user.ushou = post.get('ushou')
        user.uaddress = post.get('uaddress')
        user.uphone = post.get('uphone')
        user.uyoubian = post.get('uyoubian')
        user.save()
    context = {'title': '用户中心', 'user': user,'page_name':1,'site':1}
    return render(request, 'df_user/user_center_site.html', context)

三设计用户提交订单的页面

  • 此页面用户展示用户提交的订单,由购物车页面下单后转调过来,也可以从个人信息页面查看
  • 根据用户订单是否支付、下单顺序进行排序
def user_center_order(request, pageid):
    """
    # 此页面用户展示用户提交的订单,由购物车页面下单后转调过来,也可以从个人信息页面查看
    # 根据用户订单是否支付、下单顺序进行排序
    # """
    #
    uid = request.session.get('user_id')
    #订单信息,根据是否支付、下单顺序进行排序
    orderinfos = OrderInfo.objects.filter(
        user_id=uid).order_by('zhifu', '-oid')
    #
    # 分页
    #获取orderinfos list  以两个为一页的 list
    paginator = Paginator(orderinfos, 2)
    #获取 上面集合的第 pageid 个 值
    orderlist = paginator.page(int(pageid))
    #获取一共多少 页
    plist = paginator.page_range
    #3页分页显示
    qian1 = 0
    hou = 0
    hou2 = 0
    qian2 = 0
    # dd = dangqian ye
    dd = int(pageid)
    lenn = len(plist)
    if dd>1:
        qian1 = dd-1
    if dd>=3:
        qian2 = dd-2
    if dd<lenn:
        hou = dd+1
    if dd+2<=lenn:
        hou2 = dd+2
    #
    #
    #
    # 构造上下文
    context = {'page_name': 1, 'title': '全部订单', 'pageid': int(pageid),
               'order': 1, 'orderlist': orderlist, 'plist': plist,
               'pre':qian1,'next':hou,'pree':qian2,'lenn':lenn,'nextt':hou2}

    return render(request, 'df_user/user_center_order.html',context)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容