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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python import自定义模块方法
Feb 12 Python
Python实现一个服务器监听多个客户端请求
Apr 12 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python生成任意频率正弦波方式
Feb 25 Python
什么是python的必选参数
Jun 21 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 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和ACCESS写聊天室(六)
2006/10/09 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
生成二维码方法汇总
2014/12/26 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
Python正则表达式介绍
2012/08/06 Python
Python中logging模块的用法实例
2014/09/29 Python
Python实现读取json文件到excel表
2017/11/18 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
C语言编程题
2015/03/09 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
产品销售员岗位职责
2013/12/18 职场文书
公司委托书范本
2014/04/04 职场文书
班组拓展活动方案
2014/08/14 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
MySQL创建管理HASH分区
2022/04/13 MySQL
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫