Python Django restframework 自定义权限及使用,适用于自定义指定model的权限
2019-05-05 11:32
597 查看
现在我有个model,如下:
class PayItems(models.Model): """项目收费""" item_name = models.CharField(max_length=50, verbose_name='项目名称') charge_amount = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='收费金额') def __str__(self): return self.item_name class Meta: db_table = 'payitems' verbose_name = '项目收费'
现在为这个model自定义一个只读 或 只有拥有改model的所有权限的人,才可以进行post,put,delete操作
from rest_framework import permissions from django.contrib.auth.models import Permission class IsPyitemsOrReadOnly(permissions.BasePermission): """ 自定义权限,只读或有Pyitems的所有权限可以访问 """ def has_permission(self, request, view): # 只读method if request.method in permissions.SAFE_METHODS: return True # 得到pyitems的所有权限 permission_list = [] for i in Permission.objects.filter(content_type_id=11): permission_list.append('database.' + i.codename) permission_pyitems = tuple(permission_list) return request.user.has_perms(permission_pyitems)
其中
Permission.objects.filter(content_type_id=11) # 11为django自带表auth_permisssion,所关联的django_content_type表的id
看图
这个是auth_permission表
这个是django_content_type表
11就是这么来的。
user.has_perms(permission_pyitems)
这里的has_perms就是验证user有没有permission_pyitems权限,
permission_pyitems是一个元祖,其中写需要验证的权限
想要验证单独一个权限的话,用
user.has_perm(permission)
使用方式:
from rest_framework import permissions 导入 PayitemsSerializer 和 Pyitems class PayItemsView(viewsets.ModelViewSet): """ 项目收费 """ # 权限认证 permission_classes = (permissions.IsAuthenticated, IsPyitemsOrReadOnly) queryset = PayItems.objects.all() serializer_class = PayitemsSerializer
其中
permissions.IsAuthenticated # 这个权限是只允许通过验证的用户访问
关于Django权限可以看我写的Django Web系列一 内置登录及默认权限的使用方法
本章完。
相关文章推荐
- 【Python】Django Model 怎么使用 UUID 作为主键?
- Django自学之 使用python 通过前端页面上传文件到服务器指定路径
- Python Shell 解释器下使用Django Model
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
- 单独的 python 脚本文件使用 django 自带的 model
- 如何在编译Python指定使用自定义安装的openssl
- 使用Django的ModelForm对表单进行自动验证(可自定义验证规则)
- 07.Django中的自定义认证方式和权限的设计与使用
- 单独的 python 脚本文件使用 django 自带的 model
- Python Web 框架,第 1 部分: 使用 Django 和 Python 开发 Web 站点(转)
- spring security 3 中使用自定义数据库来设置权限
- 使用MvcHandler设计自定义系统权限<下>
- [转]spring security 3 中使用自定义数据库来设置权限
- python使用IE浏览器打开指定URL
- 使用HttpMoudle和IPrincipal实现自定义身份及权限认证
- 使用自定义Effect让指定颜色透明
- ASP.NET MVC: 使用自定义 ModelBinder
- Python-Django 使用 Hudson做CI服务器实践记
- Django为所有Model增加同样的权限的便捷方法
- 使用django的权限管理系统permission