Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
在 cms 后台管理中,主要是针对运营管理者权限。在之前的章节中,有提到用户组、用户权限、用户组权限。通过 Group 和 Permission 来对不同用户进行分组和授权。而对于超级管理员,需要采用另外一种验证方式。在类视图中装饰,通过对 request.user.is_superuser,来实现超级管理员权限认证。
username,first_name,last_name,email,password,is_staff(是否具有进入网站管理权限),is_active,is_superuser,last_login,date_joined,这是Django自带的User的基本的信息。
① 超级管理员权限
def superuser_required(viewfunc):
@wraps(viewfunc)
def _wrapper(request, *args, **kwargs):
if request.user.is_superuser:
return viewfunc(request, *args, **kwargs)
else:
raise Http404()
return _wrapper
Wrapper(装饰器)
# 装饰器:wrapper
# 模板:
def 装饰器名(func): #def 与 @之后的函数名称一致 调用函数func与ret=func(*args,**kwargs)内部函数一致
def wrapper(*args,**kwargs): #def 与 return 之后的函数名称一致
ret = func(*args,**kwargs)
return ret #return ret 与 ret=func(*args,**kwargs)一致
return wrapper
@装饰器名
def foo():
pass
② 员工管理
from django.db.models import Q
或的关系:
代码中使用到了 Q 对象,使用 Q 对象表示的是或的关系,表示只要keyword符合其中任意一个条件即可.
Q(condition1)|Q(condition2),在SQL语句里面就是条件1or条件2
且的关系:
如果需要表示同时满足多个条件的时候,只需要使用逗号连接即可Q(condition1),Q(condition2),这样表示同时需要满足条件1和条件2
或与且也是可以同时使用,使用方法是Q(condition1),Q(condition2)|Q(condition3),这样就可以表示满足条件1的时候,满足条件2或者条件3…
@superuser_required
def staffs(request):
context = {
'staffs': User.objects.filter(Q(is_staff=True)|Q(is_superuser=True))
}
return render(request, 'cms/staffs.html', context=context)
③ 新增员工
不能直接对类进行装饰,必须使用 method_decorator,把装饰器当作参数传进去。
from django.utils.decorators import method_decorator
@method_decorator(superuser_required, name='dispatch')
class AddStaffView(View):
def get(self, request):
context = {
'group': Group.objects.all()
}
return render(request, 'cms/add_staff.html', context=context)
def post(self, request):
telephone = request.POST.get('telephone')
user = User.objects.get(telephone=telephone)
user.is_staff = True
# 得到全部group的id
group_ids = request.POST.getlist('groups')
groups = Group.objects.filter(pk__in=group_ids)
user.groups.set(groups)
user.save()
return redirect(reverse('cms:staffs'))