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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
java直接调用python脚本的例子
Feb 16 Python
python中的列表推导浅析
Apr 26 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
Python计时相关操作详解【time,datetime】
May 26 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
Python数据可视化图实现过程详解
Jun 12 Python
浅析Python 多行匹配模式
Jul 24 Python
python如何实现word批量转HTML
Sep 30 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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运行速度的一些小技巧分享
2012/07/03 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
js window.event对象详尽解析
2009/02/17 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
华润集团网上药店:健一网
2016/09/19 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
法律专业应届生自荐信范文
2014/01/06 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
2015年端午节活动总结
2015/02/11 职场文书
民政工作个人总结
2015/02/28 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
毕业论文致谢词
2015/05/14 职场文书
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS