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实现数组插入新元素的方法
May 22 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
详解python中list的使用
Mar 15 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
python def 定义函数,调用函数方式
Jun 02 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Python远程linux执行命令实现
Nov 11 Python
Python函数调用追踪实现代码
Nov 27 Python
python3中布局背景颜色代码分析
Dec 01 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中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
Python中threading模块join函数用法实例分析
2015/06/04 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
pygame实现打字游戏
2021/02/19 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
执行力心得体会
2013/12/31 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
论文指导教师评语
2014/04/28 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
大学生创业事迹材料
2014/12/30 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书