栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

今天的Django教训汇总:auth用户验证获取user信息并设置查询条件-20211107

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

今天的Django教训汇总:auth用户验证获取user信息并设置查询条件-20211107

参考以下文章
  • 1.‘bool’ object is not callable
    https://www.cnblogs.com/qianzf/p/14119926.html

    查询相关资料,发现 is_authenticated 是属性而不是方法,我们应该把括号去掉,这样就没什么问题了。将if request.user.is_authenticated()改为 if request.user.is_authenticated

  • 2.Django框架的HTTP请求之WSGIRequest
    https://blog.csdn.net/weixin_47678857/article/details/106858312?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163627396816780261922132%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163627396816780261922132&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-2-106858312.pc_search_result_control_group&utm_term=WSGIRequest%E5%AF%B9%E8%B1%A1+%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF&spm=1018.2226.3001.4187

  • 2.模型user(user.py)

class AbstractUser(AbstractbaseUser, PermissionsMixin):
    """
    An abstract base class implementing a fully featured User model with
    admin-compliant permissions.

    Username and password are required. Other fields are optional.
    """
    username_validator = UnicodeUsernamevalidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = models.CharField(_('first name'), max_length=150, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_('Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')
        abstract = True

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        """Return the short name for the user."""
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)


class User(AbstractUser):
    """
    Users within the Django authentication system are represented by this
    model.

    Username and password are required. Other fields are optional.
    """
    class meta(AbstractUser.meta):
        swappable = 'AUTH_USER_MODEL'

实践:根据user模型备注的部门代码,来实现按部门代码查询。
  • 第一种写法views.py
# 验证用户的权限,信息储存在last_name
def user_permission(request):
    if request.user.is_authenticated:
        return request.user.last_name
    else:
        return None
# 建立查询结果界面
@login_required
def search_results(request):
    # 查询出user最大的query_set
    user_permission_query = Employee.objects.filter(dept_code__contains=user_permission(request))


    if 'plantid' in request.GET and request.GET['plantid']:
        #按厂别查询
        plantid = request.GET['plantid']
        employee_list = Employee.objects.filter(batch__contains=plantid)  & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': plantid})

    
    elif 'dept' in request.GET and request.GET['dept']:
    #建立部门查询条件,可多条件查询
        dept = request.GET['dept']
        if ';' in dept:
            dept_list = re.split(r';', dept)
            if len(dept_list) == 2:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1])
            elif len(dept_list) == 3:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2])
            elif len(dept_list) == 4:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3])
            elif len(dept_list) == 5:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3]) | Q(dept_code__contains=dept_list[4]) 
            #employee_list = Employee.objects.filter(Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]))
            employee_list = Employee.objects.filter(str_list)  & user_permission_query

        else:
            employee_list = Employee.objects.filter(dept_code__contains=dept) & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': dept})
    elif 'function' in request.GET and request.GET['function']:
        # 按功能查询
        function = request.GET['function']
        employee_list = Employee.objects.filter(function=function)  & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': function})

    elif 'eid' in request.GET and request.GET['eid']:
        #建立工号查询条件,可多条件查询
        eid = request.GET['eid']
        print(eid)
        if ';' in eid:
            eid_list = re.split(r';', eid)
            if len(eid_list) == 2:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1])
            elif len(eid_list) == 3:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2])
            elif len(eid_list) == 4:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2]) | Q(eid__contains=eid_list[3])
            elif len(eid_list) == 5:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2]) | Q(eid__contains=eid_list[3]) | Q(eid__contains=eid_list[4]) 
            employee_list = Employee.objects.filter(str_list)  & user_permission_query

        else:
            employee_list = Employee.objects.filter(eid=eid)  & user_permission_query
        
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': eid})


    elif 'name' in request.GET and request.GET['name']:
    #建立姓名查询条件,可多条件查询
        name = request.GET['name']
        if ';' in name:
            name_list = re.split(r';', name)
            if len(name_list) == 2:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1])
            elif len(name_list) == 3:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1]) | Q(name__contains=name_list[2])
            elif len(name_list) == 4:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1]) | Q(name__contains=name_list[2]) | Q(name__contains=name_list[3])
            elif len(name_list) == 5:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1]) | Q(name__contains=name_list[2]) | Q(name__contains=name_list[3]) | Q(name__contains=name_list[4]) 
            #employee_list = Employee.objects.filter(Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]))
            employee_list = Employee.objects.filter(str_list)  & user_permission_query

        else:
            employee_list = Employee.objects.filter(name__contains=name)  & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': name})

    else:
        return render(request, 'PPDASH/search_form.html',context={})
  • 第二种写法views.py
# 验证用户的权限,信息储存在last_name
def user_permission(request):
    if request.user.is_authenticated:
        
        if ';' in request.user.last_name:
            # 可输入5个部门查询
            dept = request.user.last_name
            dept_list = re.split(r';', dept)
            if len(dept_list) == 2:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1])
            elif len(dept_list) == 3:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2])
            elif len(dept_list) == 4:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3])
            elif len(dept_list) == 5:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3]) | Q(dept_code__contains=dept_list[4]) 
            user_permission_query = Employee.objects.filter(str_list)
        else:
            # 默认单个部门
            user_permission_query = Employee.objects.filter(dept_code__contains=request.user.last_name)
        return user_permission_query
    else:
        return None
# 建立查询结果界面
@login_required
def search_results(request):
    # 查询出user最大的query_set
    user_permission_query = user_permission(request)


    if 'plantid' in request.GET and request.GET['plantid']:
        #按厂别查询
        plantid = request.GET['plantid']
        employee_list = Employee.objects.filter(batch__contains=plantid)  & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': plantid})

    
    elif 'dept' in request.GET and request.GET['dept']:
    #建立部门查询条件,可多条件查询
        dept = request.GET['dept']
        if ';' in dept:
            dept_list = re.split(r';', dept)
            if len(dept_list) == 2:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1])
            elif len(dept_list) == 3:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2])
            elif len(dept_list) == 4:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3])
            elif len(dept_list) == 5:
                str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3]) | Q(dept_code__contains=dept_list[4]) 
            #employee_list = Employee.objects.filter(Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]))
            employee_list = Employee.objects.filter(str_list)  & user_permission_query

        else:
            employee_list = Employee.objects.filter(dept_code__contains=dept) & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': dept})
    elif 'function' in request.GET and request.GET['function']:
        # 按功能查询
        function = request.GET['function']
        employee_list = Employee.objects.filter(function=function)  & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': function})

    elif 'eid' in request.GET and request.GET['eid']:
        #建立工号查询条件,可多条件查询
        eid = request.GET['eid']
        print(eid)
        if ';' in eid:
            eid_list = re.split(r';', eid)
            if len(eid_list) == 2:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1])
            elif len(eid_list) == 3:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2])
            elif len(eid_list) == 4:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2]) | Q(eid__contains=eid_list[3])
            elif len(eid_list) == 5:
                str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2]) | Q(eid__contains=eid_list[3]) | Q(eid__contains=eid_list[4]) 
            employee_list = Employee.objects.filter(str_list)  & user_permission_query

        else:
            employee_list = Employee.objects.filter(eid=eid)  & user_permission_query
        
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': eid})


    elif 'name' in request.GET and request.GET['name']:
    #建立姓名查询条件,可多条件查询
        name = request.GET['name']
        if ';' in name:
            name_list = re.split(r';', name)
            if len(name_list) == 2:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1])
            elif len(name_list) == 3:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1]) | Q(name__contains=name_list[2])
            elif len(name_list) == 4:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1]) | Q(name__contains=name_list[2]) | Q(name__contains=name_list[3])
            elif len(name_list) == 5:
                str_list = Q(name__contains=name_list[0]) | Q(name__contains=name_list[1]) | Q(name__contains=name_list[2]) | Q(name__contains=name_list[3]) | Q(name__contains=name_list[4]) 
            #employee_list = Employee.objects.filter(Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]))
            employee_list = Employee.objects.filter(str_list)  & user_permission_query

        else:
            employee_list = Employee.objects.filter(name__contains=name)  & user_permission_query
        return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': name})

    else:
        return render(request, 'PPDASH/search_form.html',context={})

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号