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多线程ctrl+c退出问题解决方案
Oct 23 Python
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
Python assert语句的简单使用示例
Jul 28 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php控制文件下载速度的方法
2015/03/24 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
深入探究node之Transform
2017/07/20 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
Ibatis的核心配置文件都有什么
2014/09/08 面试题
运动会四百米广播稿
2014/01/19 职场文书
转预备党员政审材料
2014/02/06 职场文书
实验教师岗位职责
2014/02/13 职场文书
司机职责范本
2014/03/08 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
高中军训的心得体会
2014/09/01 职场文书
公司会议开幕词
2015/01/29 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
大学生村官入党自传
2015/06/26 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
JS代码编译器Monaco使用方法
2021/06/11 Javascript
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL