怎么在django中通过url实现权限控制

  介绍

怎么在django中通过url实现权限控制?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强> 1.的模型。py文件

class 水平(models.Model):   时间=l_name 才能;models.CharField (max_length=50, verbose_name=暗燃睹啤?   时间=l_permission 才能;models.OneToOneField (“permission")   def 才能__str__(自我):   ,,,return  self.l_name   ,   ,   class 用户信息(models.Model):   时间=u_name 才能;models.CharField (max_length=50, verbose_name=坝没啤?   时间=u_user 才能;models.OneToOneField(用户)   时间=u_level 才能;models.ForeignKey(水平,related_name=發ev")   ,   def 才能__str__(自我):   ,,,return  self.u_name   ,   ,   class 许可(models.Model):   时间=p_name 才能;models.CharField (max_length=50, verbose_name=叭ㄏ廾啤?   时间=p_menu 才能;models.ManyToManyField (“menu")   ,   def 才能__str__(自我):   ,,,return  self.p_name   ,   class 菜单(models.Model):   时间=m_name 才能;models.CharField (max_length=50, verbose_name=安说ッ啤?   时间=m_url 才能;models.CharField (max_length=50, verbose_name=安说サ刂贰?空白=True, null=True)   def 才能__str__(自我):   ,,,return  self.m_name   ,   class 昵称(models.Model):   时间=n_nickname 才能;models.CharField (max_length=50, verbose_name=瓣浅啤?空白=True, null=True)   时间=n_user 才能;models.ForeignKey(用户信息,空白=True, null=True, related_name=皀ick")   ,   def 才能__str__(自我):   ,,,return  self.n_nickname

<强> 2.设置。py文件

URL_WHITE_LIST =,(& # 39;指数# 39;,,& # 39;登录# 39;,,& # 39;注销# 39;]

设置路由白名单。

<强> 3.的观点。py文件

def  url_check(有趣的):   def 才能;检查(请求、* args * * kwargs):   ,,,if  request.session.get (“p_l",没有一个):   ,,,,,require_list =, pickle.loads (request.session.get (“p_l"))   ,,,,,request_url =, request.path.replace (“/?““)   ,,,,,ua =, request.META.get (& # 39; HTTP_USER_AGENT& # 39;,也没有)   ,,,,,if  request_url 拷贝require_list 或是request_url 拷贝IP_WHITE_LIST:   ,,,,,,,return 乐趣(请求、* args * * kwargs)   ,,,,,其他的:   ,,,,,,,error_msg =,“没有权限!“   ,,,,,,,menu_ =, pickle.loads (request.session.get (“p_l"))   ,,,,,,,return 渲染(请求,“index.html", {“error_msg": error_msg,“menu": menu_})   ,,,:   ,,,,,return  HttpResponseRedirect(反向(“login"))   return 才能;检查

定义一个路由检测的闭包方法,根据用户登录时的会话信息,获取该用户角色可以访问的路由,如果当前访问的地址不在白名单或是会话记录里,返回错误信息。

_check   menuname def 菜单(请求):   return 才能;HttpResponse (“& lt; h2> % s“% menuname)

看完上述内容,你们掌握怎么在django中通过url实现权限控制的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

怎么在django中通过url实现权限控制