django rest框架角色过滤器

djangorestframework-role-filters的Python项目详细描述


https://travis-ci.org/allisson/django-rest-framework-role-filters.svg?branch=masterhttps://codecov.io/gh/allisson/django-rest-framework-role-filters/branch/master/graph/badge.svghttps://img.shields.io/pypi/v/djangorestframework-role-filters.svghttps://img.shields.io/github/license/allisson/django-rest-framework-role-filters.svghttps://img.shields.io/pypi/pyversions/djangorestframework-role-filters.svg

如何安装

pip install djangorestframework-role-filters

我为什么写这个项目?

我希望在代码中没有多个ifs的情况下轻松处理角色

如何使用

使用角色定义创建role_filters.py

fromrest_framework_role_filters.role_filtersimportRoleFilterfrom.serializersimportPostSerializerForUserclassAdminRoleFilter(RoleFilter):role_id='admin'classUserRoleFilter(RoleFilter):role_id='user'defget_allowed_actions(self,request,view,obj=None):# This example returns same list both for "global permissions" check,# and for "object" permissions, but different list may be returned# if `obj` argument is not None, and this list will be used to check# if action is allowed during call to `ViewSet.check_object_permissions`return['create','list','retrieve','update','partial_update']defget_queryset(self,request,view,queryset):queryset=queryset.filter(user=request.user)returnquerysetdefget_serializer_class(self,request,view):returnPostSerializerForUserdefget_serializer(self,request,view,serializer_class,*args,**kwargs):fields=('body','created_at','id','serializer_name','title','updated_at','user',)returnserializer_class(*args,fields=fields,**kwargs)

创建视图集并重写get-role-id方法

fromrest_framework_role_filters.role_filtersimportRoleFilterGroupfromrest_framework_role_filters.viewsetsimportRoleFilterModelViewSetfrom.modelsimportPostfrom.role_filtersimportAdminRoleFilter,UserRoleFilterfrom.serializersimportPostSerializerclassPostViewSet(RoleFilterModelViewSet):role_filter_group=RoleFilterGroup(role_filters=[AdminRoleFilter(),UserRoleFilter()])queryset=Post.objects.all()serializer_class=PostSerializerdefget_role_id(self,request):returnrequest.user.role.role_iddefperform_create(self,serializer):serializer.save(user=self.request.user)

如果角色id为“admin”:

  • 允许所有操作
  • 默认的queryset被返回-Post.objects.all()
  • 使用默认的serializer_class-PostSerializer
  • 使用默认的viewsetget_serializer方法

如果角色id是“user”:

  • 只允许“创建”、“列表”、“检索”、“更新”、“部分更新”操作
  • queryset由用户过滤
  • 使用serializer_class=PostSerializerForUser
  • 使用fieldskwargs初始化序列化程序(例如,对于修改的序列化程序,如中所述 DRF: Dynamically modifying fields页)

检查testapp example代码实现。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将小时和分钟添加到特定时间   java计算三维椭圆轨道上的点   java在JXDatePicker中禁用未来日期   尝试从数据库检索密码值时出现java错误   文本区域中的swing格式。JAVA   ColdFusion 10中的java BouncyCastle库   java HBase mapreduce部分未运行   java为什么公共类需要导入到包中而不是自己的包中?   java如何使用Gson为多个JSON对象编写TypeAdapter?   函数式编程Java 8添加元素的方法   java部署TextFairy,但在构建渐变时看到错误   java FindBugs EI_EXPOSE_REP bug是否只关注日期?   http Java URLConnection:如何确定web文件的大小?   jndi从LDAP条目(名称相同)中获取所有值,并将它们存储在带有Java的Lotus Notes中   筛选结果为HBase时的java OutofOrdersCannerExtenception   java Apache POI SXSSFSheet。getRow()返回null假阳性   关于星型模式的java   在Java中生成链表时出现异常