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中使用urllib2防止302跳转的代码例子
Jul 07 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
基于django传递数据到后端的例子
Aug 16 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
tensorflow自定义激活函数实例
Feb 04 Python
keras读取h5文件load_weights、load代码操作
Jun 12 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隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
smarty简单分页的实现方法
2014/10/27 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
理解javascript async的用法
2017/08/22 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
python字符串替换的2种方法
2014/11/30 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
python实现银行管理系统
2019/10/25 Python
pytorch 常用线性函数详解
2020/01/15 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
Python下载的11种姿势(小结)
2020/11/18 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
教育科研先进个人材料
2014/01/26 职场文书
创意婚礼策划方案
2014/05/18 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
公务员个人总结
2015/02/12 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
三十年同学聚会感言
2015/07/30 职场文书