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 3中print函数的换行详解
Aug 08 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
Python发展简史 Python来历
May 14 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
Python API自动化框架总结
Nov 12 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 Python
Django给表单添加honeypot验证增加安全性
May 06 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 Python
总结Python连接CS2000的详细步骤
Jun 23 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笔试题
2009/08/04 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
php实现的生成排列算法示例
2019/07/25 PHP
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
使用Python pip怎么升级pip
2020/08/11 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
热爱祖国的演讲稿
2014/05/04 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript