-
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={})



