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中的decode()方法的使用
May 18 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
python中with用法讲解
Feb 07 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
python右对齐的实例方法
Jul 05 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
Python pandas对excel的操作实现示例
Jul 21 Python
python+requests接口自动化框架的实现
Aug 31 Python
利用Python优雅的登录校园网
Oct 21 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的FTP学习(四)
2006/10/09 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
使用Python函数进行模块化的实现
2019/11/15 Python
python使用建议与技巧分享(二)
2020/08/17 Python
python 写一个水果忍者游戏
2021/01/13 Python
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
华为C++笔试题
2014/08/05 面试题
酒店副总岗位职责
2013/12/24 职场文书
大家检讨书5000字
2014/02/03 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
会计工作总结范文2014
2014/12/23 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
公司职员入党自传书
2015/06/26 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
Django与数据库交互的实现
2021/06/03 Python
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android