介绍
怎么在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实现权限控制的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!