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基于Tkinter库实现简单文本编辑器实例
May 05 Python
Python中pygame安装方法图文详解
Nov 11 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
人机交互程序 python实现人机对话
Nov 14 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
pycharm 的Structure界面设置操作
Feb 05 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 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 curl模拟浏览器抓取网站信息
2013/10/28 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
layui radio性别单选框赋值方法
2018/08/15 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
Django中的模型类设计及展示示例详解
2020/05/29 Python
QML实现钟表效果
2020/06/02 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
人事主管岗位职责范本
2013/12/04 职场文书
小学教师听课制度
2014/02/01 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
同学聚会通知短信
2015/04/20 职场文书
少先队中队工作总结
2015/08/14 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle