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二叉树遍历的实现方法
Nov 21 Python
初步讲解Python中的元组概念
May 21 Python
pandas表连接 索引上的合并方法
Jun 08 Python
python实现雨滴下落到地面效果
Jun 21 Python
Numpy之random函数使用学习
Jan 29 Python
Python二叉树的镜像转换实现方法示例
Mar 06 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python爬虫破解字体加密案例详解
Mar 02 Python
tensorflow中的数据类型dtype用法说明
May 26 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实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
JavaScript全局函数使用简单说明
2011/03/11 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
详解Python中类的定义与使用
2017/04/11 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
如何通过python实现人脸识别验证
2020/01/17 Python
幼儿教师个人求职信范文
2013/09/21 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
标准单位租车协议书
2014/09/23 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
公司出纳岗位职责
2015/03/31 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript