django 通过url实现简单的权限控制的例子


Posted in Python onAugust 16, 2019

根据用户权限设定用户可以访问哪些页面,用django实现一个简单的demo。

1.models.py 文件

class level(models.Model):
  l_name = models.CharField(max_length=50,verbose_name="等级名称")
  l_permission = models.OneToOneField("permission")
  def __str__(self):
    return self.l_name
 
 
class userinfo(models.Model):
  u_name = models.CharField(max_length=50,verbose_name="用户名称")
  u_user = models.OneToOneField(User)
  u_level = models.ForeignKey(level,related_name="lev")
 
  def __str__(self):
    return self.u_name
 
 
class permission(models.Model):
  p_name = models.CharField(max_length=50,verbose_name="权限名称")
  p_menu = models.ManyToManyField("menu")
 
  def __str__(self):
    return self.p_name
 
class menu(models.Model):
  m_name = models.CharField(max_length=50,verbose_name="菜单名称")
  m_url = models.CharField(max_length=50,verbose_name="菜单地址",blank=True,null=True)
  def __str__(self):
    return self.m_name
 
class nickname(models.Model):
  n_nickname = models.CharField(max_length=50,verbose_name="昵称",blank=True,null=True)
  n_user = models.ForeignKey(userinfo,blank=True,null=True,related_name="nick")
 
  def __str__(self):
    return self.n_nickname

2.settings.py 文件

URL_WHITE_LIST = ['index', 'login', 'logout']

设置路由白名单。

3.views.py 文件

def url_check(fun):
  def check(request,*args,**kwargs):
    if request.session.get("p_l",None):
      require_list = pickle.loads(request.session.get("p_l"))
      request_url = request.path.replace("/","")
      ua = request.META.get('HTTP_USER_AGENT',None)
      if request_url in require_list or request_url in IP_WHITE_LIST:
        return fun(request,*args,**kwargs)
      else:
        error_msg = "没有权限!"
        menu_ = pickle.loads(request.session.get("p_l"))
        return render(request,"index.html",{"error_msg":error_msg,"menu":menu_})
    else:
      return HttpResponseRedirect(reverse("login"))
  return check

定义一个路由检测的闭包方法,根据用户登录时的session信息,获取该用户角色可以访问的路由,如果当前访问的地址不在白名单或是session记录里,返回错误信息。

@url_check
def menu(request,menuname):
  return HttpResponse("<h1>%s</h1>"%menuname)

在之后的方法上添加该闭包,即可实现简易的路由控制。

以上这篇django 通过url实现简单的权限控制的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
python实现备份目录的方法
Aug 03 Python
简单谈谈python的反射机制
Jun 28 Python
Python中单例模式总结
Feb 20 Python
tensorflow更改变量的值实例
Jul 30 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
Python理解递归的方法总结
Jan 28 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
python如何实现单链表的反转
Feb 10 Python
对Django中内置的User模型实例详解
Aug 16 #Python
对Django中的权限和分组管理实例讲解
Aug 16 #Python
django创建最简单HTML页面跳转方法
Aug 16 #Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 #Python
解决python3 安装不了PIL的问题
Aug 16 #Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 #Python
django 使用 PIL 压缩图片的例子
Aug 16 #Python
You might like
最简单的PHP程序--记数器
2006/10/09 PHP
PHP生成静态页
2006/11/25 PHP
mayfish 数据入库验证代码
2010/04/30 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
javascript如何实现暂停功能
2015/11/06 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
vue实现选中效果
2020/10/07 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
Python探索之SocketServer详解
2017/10/28 Python
Python判断两个对象相等的原理
2017/12/12 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
python之array赋值技巧分享
2019/11/28 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
一份Java笔试题
2012/02/21 面试题
市场营销战略计划书
2014/05/06 职场文书
2014年营业员工作总结
2014/11/18 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
违纪检讨书
2015/01/27 职场文书
店铺转让协议书
2015/01/29 职场文书
贷款工资证明范本
2015/06/12 职场文书
关于五一放假的通知
2015/08/18 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
Mysql文件存储图文详解
2021/06/01 MySQL