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

django-权限验证场景的更多相关文章

  1. Django权限机制的实现

    Django权限机制的实现 1. Django权限机制概述 权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全和灵活:用好权限机制,能让系统更加强大和健壮.因此,基于Django的开发 ...

  2. 从零开始学 Java - Spring AOP 实现用户权限验证

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

  3. Web用户的身份验证及WebApi权限验证流程的设计和实现

    5. WebApi 服务端代码示例 5.1 控制器基类ApiControllerBase [csharp] view plaincopy   /// /// Controller的基类,用于实现适合业 ...

  4. 基于 Annotation 拦截的 Spring AOP 权限验证方法

    基于 Annotation 拦截的 Spring AOP 权限验证方法 转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilte ...

  5. Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码

    本问主要介绍asp.net的身份验证机制及asp.net MVC拦截器在项目中的运用.现在让我们来模拟一个简单的流程:用户登录>权限验证>异常处理 1.用户登录 验证用户是否登录成功步骤直 ...

  6. 【Python】django权限管理

    参考:http://www.cnblogs.com/esperyong/ 参考:https://docs.djangoproject.com/en/1.8/topics/auth/default/#t ...

  7. C# MVC权限验证

    前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ...

  8. [Python学习] Django 权限控制

    本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事. 一.主要内容 1.什么是权限管理? 2.Web 权限 3.Django 权限机制 ...

  9. 转 Web用户的身份验证及WebApi权限验证流程的设计和实现

    前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...

  10. django(权限、认证)系统——用户Login,Logout

    上面两篇文章,讲述的Django的Authentication系统的核心模型对象User API和相关的使用,本文继续深入,讨论如何在Web中使用Authentication系统. 前面说了,Djan ...

随机推荐

  1. Kafka Stream

    Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature(当前:1.0.0-rc0,参见:https://github.com/apache/kafka/releas ...

  2. Fabric Engine2.0的自定义节点功能

    Fabric Engine是一个多用途的引擎,针对maya等软件写节点写功能很方便.尤其是canvas节点编辑面板,提供了大量现有的功能供用户调用,当然这些节点功能都是可被用户编辑修改的,除此之外还提 ...

  3. 美剧黑名单的插曲《Jolene》

    网易上有Slowdown 版本.<Jolene>Dolly Parton

  4. Azure Application Gateway (5) Application Gateway SSL Offload配置

    <Windows Azure Platform 系列文章目录> 之前有个客户提出了一个需求,他们的互联网访问的架构分为两种: 1.第一层是使用Azure Application Gatew ...

  5. nvm环境配置

    安装nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash nvm insta ...

  6. [蓝桥杯]ALGO-49.算法训练_寻找数组中最大值

    题目描述: 问题描述 对于给定整数数组a[],寻找其中最大值,并返回下标. 输入格式 整数数组a[],数组元素个数小于1等于100.输出数据分作两行:第一行只有一个数,表示数组元素个数:第二行为数组的 ...

  7. Inno Setup 脚本

    给你个我用的例子: Delphi/Pascal code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...

  8. tomcat操作

    一.启动 D:\tomcat8.5.9\bin\startup   或者  D:\tomcat8.5.9\bin\catalina start 关闭tomcat: D:\tomcat8.5.9\bin ...

  9. ES6基础一

    声明方式 var和let的区别 1,var用来声明全局变量,let用来声明局部变量:               2,var可以提升变量,let声明的变量不在变量提升:        const声明常 ...

  10. [转][CentOS]开机时

    来自:https://www.cnblogs.com/jcblog/p/6431252.html 在 CentOS 开机界面有两个菜单: 第一个选项正常启动,第二个选项急救模式启动(系统出项问题不能正 ...