前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-信息资讯-新增管理员权限

Django实战-信息资讯-新增管理员权限

作者头像
小团子
发布2019-07-18 17:01:54
7870
发布2019-07-18 17:01:54
举报
文章被收录于专栏:数据云团数据云团

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的基本的信息。

① 超级管理员权限

代码语言:javascript
复制
代码语言:javascript
复制
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(装饰器)

代码语言:javascript
复制
# 装饰器: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

② 员工管理

代码语言:javascript
复制
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…

代码语言:javascript
复制
@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,把装饰器当作参数传进去。

代码语言:javascript
复制
from django.utils.decorators import method_decorator
代码语言:javascript
复制
@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'))
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档