.Tang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.需要登录才能够访问的验证

from django.contrib.auth.decorators import login_required  # 登录装饰器
# method_decorator 使装饰器装饰在类上面(装饰器的类装饰器?)  login_required 登陆验证,失败跳转
# despatch 类里面有多个方法(get,post).将这些方法都装饰在despatch中,(通过despatch方法确定出get or post 再由login_required装饰)。
@method_decorator(login_required(login_url='/account/login/'), name='dispatch')
class Secret(View):
  def get(self, request):
    return render(request, 'a.html')

2.需要是员工is_staff为1才能访问

from django.contrib.admin.views.decorators import staff_member_required


@staff_member_required(login_url='/')  # 不是公司员工则跳转到该路由
class Secret(View):
  def get(self, request):
    return render(request, 'a.html')

3.需要通过验证

复制代码
def xfz_auth_required(func):
    def wrapper(request, *args, **kwargs):
        if request.user.is_authenticated:  # is_authenticated 是通过login方法登录才有的一个判断方法 。 更详细 https://www.cnblogs.com/tangpg/p/9074418.html
       return func(request, *args, **kwargs) else: if request.is_ajax(): return restful.params_error(message="请登陆") return redirect('/account/login') return wrapper
复制代码

4.使用django自带的权限管理                            BaseCommand详见:http://www.cnblogs.com/tangpg/p/9428980.html

复制代码
from django.http import Http404


def xfz_permission_required(model):
    ''' 该model的所有权都具备才可以验证通过 '''
    def decorator(viewfunc):
        @wraps(viewfunc)
        def _wrapper(request, *args, **kwargs):
            content_type = ContentType.objects.get_for_model(model)
            permissions = Permission.objects.filter(content_type=content_type)
            # has_perms:只能采用字符串的形式判断
            # 字符串的形式为:app_label.codename
            codenames = [content_type.app_label+'.'+permission.codename for permission in permissions]
            print(codenames)  # ['course.add_course', 'course.change_course', 'course.delete_course']
            # result = 0
            # for codename in codenames:
            #     if request.user.has_perm(codename):
            #         result+=1
            # print(result)

            ##  it's has_perms!!! not has_perm!!!
            result = request.user.has_perms(codenames)
            if result:
                return viewfunc(request, *args, **kwargs)
            else:
                raise Http404
        return _wrapper
    return decorator
复制代码

5.判断是否为superuser

def xfz_superuser_required(viewfunc):
    @wraps(viewfunc)
    def wrapper(requset, *args, **kwargs):
        if requset.user.is_superuser:
            return viewfunc(requset, *args, **kwargs)
        else:
            raise Http404
    return wrapper

 

posted on   .Tang  阅读(176)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示