django 通过url实现简单的权限控制的例子

 更新时间:2019年08月16日 19:12:29   作者:喝完这杯还有一箱  
今天小编就为大家分享一篇django 通过url实现简单的权限控制的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

根据用户权限设定用户可以访问哪些页面,用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 使用递归回溯完美解决八皇后的问题

    今天小编就为大家分享一篇python 使用递归回溯完美解决八皇后的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • SymPy库关于矩阵的基本操作和运算

    SymPy库关于矩阵的基本操作和运算

    本文主要介绍了SymPy库关于矩阵的基本操作和运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python将YUV420P文件转PNG图片格式的两种方法

    python将YUV420P文件转PNG图片格式的两种方法

    这篇文章主要介绍了python将YUV420P文件转PNG图片格式的两种方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • pandas如何删除没有列名的列浅析

    pandas如何删除没有列名的列浅析

    这篇文章主要给大家介绍了关于pandas如何删除没有列名的列的相关资料,需要的朋友可以参考下
    2021-11-11
  • Python sklearn CountVectorizer使用详解

    Python sklearn CountVectorizer使用详解

    这篇文章主要介绍了Python_sklearn_CountVectorizer使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 把项目从Python2.x移植到Python3.x的经验总结

    把项目从Python2.x移植到Python3.x的经验总结

    这篇文章主要介绍了把项目从Python2.x移植到Python3.x的经验总结,包括作者所使用的Jinja2框架中一些需要注意的地方,需要的朋友可以参考下
    2015-04-04
  • Python numpy实现数组合并实例(vstack,hstack)

    Python numpy实现数组合并实例(vstack,hstack)

    这篇文章主要介绍了Python numpy实现数组合并(官网实例),涉及vstack,hstack的简单用法,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • PyTorch中torch.cuda.amp相关警告的解决方法

    PyTorch中torch.cuda.amp相关警告的解决方法

    在最近的写代码过程中,遇到了两个与 PyTorch 的混合精度训练相关的警告信息,torch.cuda.amp.autocast和torch.cuda.amp.GradScaler,文中通过代码示例给大家介绍了详细的解决方法,需要的朋友可以参考下
    2025-02-02
  • PyTorch上搭建简单神经网络实现回归和分类的示例

    PyTorch上搭建简单神经网络实现回归和分类的示例

    本篇文章主要介绍了PyTorch上搭建简单神经网络实现回归和分类的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • pycharm 代码自动补全的实现方法(图文)

    pycharm 代码自动补全的实现方法(图文)

    这篇文章主要介绍了pycharm 代码自动补全的实现方法(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论