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删除文件示例分享
Jan 28 Python
Python中__call__用法实例
Aug 29 Python
python实现中文输出的两种方法
May 09 Python
python在文本开头插入一行的实例
May 02 Python
对python生成业务报表的实例详解
Feb 03 Python
详解python持久化文件读写
Apr 06 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
python随机模块random的22种函数(小结)
May 15 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
python中最小二乘法详细讲解
Feb 19 Python
Python 处理表格进行成绩排序的操作代码
Jul 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
yii操作session实例简介
2014/07/31 PHP
php两种无限分类方法实例
2015/04/21 PHP
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
详解Python中with语句的用法
2015/04/15 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
python 读写中文json的实例详解
2017/10/29 Python
python操作列表的函数使用代码详解
2017/12/28 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
PyQt5实现简易电子词典
2019/06/25 Python
通过cmd进入python的实例操作
2019/06/26 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
小学生元旦感言
2014/02/26 职场文书
公共场所禁烟标语
2014/06/25 职场文书
订货会邀请函
2015/01/31 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL