• Django登录使用的技术和组件


    登录

      '''
      获取用户所有的数据
      每条数据请求的验证
      成功之后获取所有正确的信息
      失败则显示错误信息
      '''
    #登陆页面管理
    def login(request):
        if request.method == 'GET':
            return render(request,'login.html')
        elif request.method == 'POST':
            obj = FM(request.POST)
            sucst = obj.is_valid()
            if sucst:
                username = obj.cleaned_data['username']
                password = obj.cleaned_data['password']
                #添加注册方法--往数据库中添加字段
                # models.UserInfo.objects.create(**obj.cleaned_data)
                dic = models.UserInfo.objects.filter(username=username).first()
                # print(dic.username)
                if not dic:
                    return render(request, 'login.html',{'usererrors':'此用户未注册'})
                elif dic.password == password:
                    request.session['username'] = username
                    request.session['is_login'] = True
                    return redirect('/index/')
                else:
                    return render(request,'login.html',{'pswerrors':'密码错误'})
            else:
                # print(obj.errors)
                return render(request, 'login.html', {'obj': obj})
    登录

    session

      '''
      生产随机字符串
      写到用户浏览器
      保持在session中
      依赖cookie
      '''
      session本身封装了上述功能
    request.session['username'] = username
    request.session['is_login'] = True
    session设置字段

    session封装成装饰器进行用户验证

      '''
      获取用户登录字段状态
      获取用户字段名称赋值username
      查找用户所在组
      通过组ID获取权限
      '''
    #这个是做管理员与商务部人员双重验证,管理材料出入库:不是管理员或商务部人员则返回主页
    def identity(fun):
        def verication(request,*args,**kwargs):
            if request.session.get('is_login',None):
                username = request.session.get('username')
                #print(username)
                groupid = models.UserInfo.objects.filter(username=username).first().usergroup_id
                #print(groupid)
                usergroup = models.UserGroup.objects.filter(id=groupid).first().groupname
                #print(usergroup)
                if usergroup == '管理员' or usergroup == '商务部':
                    return fun(request,*args,**kwargs)
                else:
                    return redirect('/index/')
            else:
                return redirect('/index/')
        return verication
    session验证

    用户退出 

      '''
      清除session状态
      '''
    def logout(request):
        request.session.clear()
        return redirect('/login/')
    清除session状态
  • 相关阅读:
    限制转交订单-采购直接批准PO
    限制更改采购订单的供应商地点
    限制采购订单行数量的小数位
    加工费采购订单批准后禁止更改订单数量
    限制ITEM读取其它物料的物料描述
    采购订单限制订单“行号”过大的控制
    限制行表新增记录
    采购订单行需求时间必输
    报价单内,同一物料只允许一条行价格记录
    限制头表新增记录
  • 原文地址:https://www.cnblogs.com/gaodi2345/p/11996449.html
Copyright © 2020-2023  润新知