Django权限设置及验证方式


Posted in Python onMay 13, 2020

当创建一个Models, 在同步到数据库里,django默认设置了三个权限 ,就是 add, change, delete权限。但是往往有时候,根本不够用,此时我们可以自己写一个脚本,来进行权限的设置.

根据DJango官方文档解释,权限都是与models有关系的,此时.如果想设置一个view,对于有权限的用户进行放行,对于无权限的用户进行限制.那么我们就可以着手来写这个需求.

验证权限的方法一般有两种,一种是用@permission_required来进行验证,第二中是用user.has_perm()在函数里进行验证,通过返回的True或者False来进行下一步

同时我的稍微复杂一些,是在django中加入了第三方认证oauth2,并限制跨域访问的资源.具体见我之前的文章.

具体步骤如下:

第一步:

设置跨域访问资源范围,如下:

CORS_URLS_REGEX = r'^/(o|api/oauth/).*$'
#只允许跨域访问url为/o/....或者/api/oauth/...的资源

第二步:

写一个设置permission脚本,或者你自己创建一个model,然后migrate得到django默认提供的三个权限,当然,这过于繁琐和单一,你也可以自定义permission,在你创建的model里添加Meta类,然后创建你的自定义permission.如下:

class **Model():
        ....
        class Meta:
        permissions = (
          (can_read'', '查看'),
          (can_delete'', '删除'),
        )

或者, 你可以自己写一个创建permission的文件.这里,我的需求是根据用户来限制是否访问资源,直接在User上来进行permission设置,如下:

from django.contrib.auth.models import Permission, User
from django.contrib.contenttypes.models import ContentType
 
def run(codename, name):
  content_type = ContentType.objects.get_for_model(User)
  permission = Permission.objects.get_or_create(codename=codename, name=name, content_type=content_type)
  return permission

运行run即可创建指定codename的permission,这与用户是绑定的.

第三步:

验证权限,最主要的有两种方法,用装饰器方法,或者在函数里用has_perm/has_perms,我这里使用装饰器方法,当然.最开始我自己手写了一个验证装饰器,后来发现,django有自带的,也比较好用,直接在views函数钱@permission_required(perms)即可.

由于此处我用的是django的视通函数,无法直接在函数前加@permission_required(perms),需要用到如下方法,可以将函数装饰器改为方法或类装饰器的方法,django自带的@method_decorator(decorator),

用法如下

class LimitView(ProtectedResourceView):
  @method_decorator(permission_required(per_list[0]))
  def get(self, request):
    ....

LimitView为我自己的视图函数,继承自oauth的ProtectedResourceView,作用是保护视图函数不被授权用户查看.permission_required参数为用户需要拥有的权限,如果有,可以正常访问,否则,会重定向到登录页面,或者你可以在此处自己指定转向页面.

需要注意的是使用@permission_required(perms)时request.user需有字段,否则会报错.我这里没有登录也可以访问授权是因为我使用了用户允许的授权码访问,会直接在request中设置user字段为该access_token对应的user.

补充知识:django 校验用户是否有权限

views中判断是否有权限:

{% if request.user.has_perm('app.权限名')%}
……
 {%endif%}

html中根据权限判断控件是否显示:

{% if perms.appname.codename%}
{% endif%}

切记:要想html中变量生效,必须传入RequestContext,views.py中必须是render(request,'xx.html',{}),这个问题纠结很久。

参考django文档:https://docs.djangoproject.com/en/2.1/topics/auth/default/#permissions

以上这篇Django权限设置及验证方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
django+echart绘制曲线图的方法示例
Nov 26 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
python config文件的读写操作示例
Sep 27 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
python如何修改文件时间属性
Feb 05 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 #Python
django自带的权限管理Permission用法说明
May 13 #Python
Python基于jieba, wordcloud库生成中文词云
May 13 #Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 #Python
Jupyter notebook如何实现指定浏览器打开
May 13 #Python
基于FME使用Python过程图解
May 13 #Python
django rest framework serializers序列化实例
May 13 #Python
You might like
星际争霸中的热键
2020/03/04 星际争霸
十天学会php(3)
2006/10/09 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
简历自我评价怎么写好呢?
2014/01/04 职场文书
八年级历史教学反思
2014/01/10 职场文书
大学生蛋糕店创业计划书
2014/01/13 职场文书
索桥的故事教学反思
2014/02/06 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
市场营销调查计划书
2014/05/02 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
学校欢迎标语
2014/06/18 职场文书
个人股份合作协议书
2014/10/24 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python