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之玩转字符串(2)更新篇
Sep 28 Python
详解Python的迭代器、生成器以及相关的itertools包
Apr 02 Python
利用Python开发实现简单的记事本
Nov 15 Python
浅析python递归函数和河内塔问题
Apr 18 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
Python 读写文件的操作代码
Sep 20 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
Python OS模块实例详解
Apr 15 Python
Python一键安装全部依赖包的方法
Aug 12 Python
在Python中实现函数重载的示例代码
Dec 12 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 Python
python实现A*寻路算法
Jun 13 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python实现计算最小编辑距离
2016/03/17 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python制作抖音代码舞
2019/04/07 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
荷兰家电销售网站:Welhof
2020/12/08 全球购物
什么是封装
2013/03/26 面试题
涉密人员保密承诺书
2014/05/28 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
Oracle中DBLink的详细介绍
2022/04/29 Oracle