django 通过url实现简单的权限控制的例子
作者:喝完这杯还有一箱 发布时间:2022-02-05 07:07:50
标签: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)
在之后的方法上添加该闭包,即可实现简易的路由控制。
来源:https://blog.csdn.net/qq_37049050/article/details/81867390
0
投稿
猜你喜欢
- 注意事项:1.PyCharm尽量在官网下载:https://www.jetbrains.com/pycharm/download/也可以用本
- 本文主要介绍的关于Python切片赋值的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:昨天有同学问了我这么个问题:t = [1
- 作为一位不懂代码的业余网页制 * 好者,常常羡慕专业程序人员在浏览器中编制出的效果超酷的一些多媒体作品。唉,无奈程序那东东,酶涩南学,非一日之
- 原始结构:Column1 Column2----------- ----------1 A1 B2 C2 D2 E3 F查询效果:Colum
- KNN算法算是最简单的机器学习算法之一了,这个算法最大的特点是没有训练过程,是一种懒惰学习,这种结构也可以在tensorflow实现。KNN
- 数据类型是一种值的集合以及定义在这种值上的一组操作。一切语言的基础都是数据结构,所以打好基础对于后面的学习会有百利而无一害的作用。pytho
- bootstrap 中的bootstrapValidator可以对前端的数据进行验证,但是有的时候我们需要动态的添加验证,这样需要我们动态的
- 而标准的事件触发可以使用dispatchEvent方法。但现在FF5无法触发了A的默认行为了。如下 <!doctype html>
- 本篇文章主要通过一个简单的例子来实现神经网络。训练数据是随机产生的模拟数据集,解决二分类问题。下面我们首先说一下,训练神经网络的一般过程:1
- 抛出的异常信息:异常详细信息: System.ArgumentOutOfRangeException: “ddlTotalCostDisco
- 很多朋友说JavaScript的decodeURI函数也可以实现,但有bug所有呢,下面看下下面的函数,经过测试使用暂时没什么问题,我在之前
- 在Python中,最基本的数据结构为序列。Python中包含6种内建序列:字符串、列表、元组、Unicode字符串、buffer对象、xra
- 如下所示:将不想索引的文件夹设置为Excluded Folders 及设置检索不包括的文件File - Settings - -> P
- 导语哈喽铁汁们好久不见吖~小编已经复工了于是马不停蹄赶来给大家准备新年礼物算开工礼物吧!海龟来作图虎年就是要画老虎2022不用纸和笔~今晚画
- 目前有三个解决办法,也是亲测有用的:第一个方法:因为之前有通过pycharm的project interpreter里的+号添加过一些库,但
- openpyxl特点openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容
- 现代浏览器可以基于RFC 2397标准使用base64把图片进行编码,然后输出类似data:image/png;base64,iVBORw0
- 目录1、生成器2、迭代器与可迭代的生成器1、生成器现在可以通过生成器来直接创建一个列表,但是由于内存的限制,列表的容量肯定是有限的,如果我们
- 进程Process是对各种资源管理的集合,包含对各种资源的调用、内存的管理、网络接口的调用;一个进程Process可以包含多个子进程,启动一
- websocket网易聊天室?web微信?直播?假如你工作以后,你的老板让你来开发一个内部的微信程序,你需要怎么办?我们先来分析一下里面的技