django自身携带的是基于model注册数据库级别的权限(依赖model中定义的表权限),这里简单的描述下应用级别的权限注册。
首先admin管理页面只有user和group等注册应用,我们要先将content type 和permission注册到admin页面,使之出现。
在admin.py中
from django.contrib import admin
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
@admin.register(Permission)
class PermissionAdmin(admin.ModelAdmin):
list_display = ('codename', 'content_type_id', 'name')
search_fields = ('codename', 'content_type_id', 'name')
@admin.register(ContentType)
class ContentTypeAdmin(admin.ModelAdmin):
list_display = ('app_label', 'model')
search_fields = ('app_label', 'model')
这样我们就可以添加删除permission和content type了,下面我们进行自定义添加权限的注册使用。
1.权限的注册
在admin管理页面添加Content types
然后添加permission
这样我们的应用权限就注册成功了,我们就可以将此权限赋予组或者个人用户下进行使用。
2.装饰函数的使用
基于函数的装饰:
from django.contrib.auth.decorators importlogin_required, permission_required
@permission_required('auth.add_user',login_url='/noperm/')
@login_required(login_url='/login')
def test(request):
return JsonResponse({'data':'success test permission! '})
基于类的装饰:
class Test(APIView):
@method_decorator(permission_required('auth.can_read_sa',login_url='/noperm/'))
@method_decorator(login_required(login_url='/login'))
def dispatch(self, *args, **kwargs):
return super(Test, self).dispatch(*args, **kwargs)
def get(self, request):
return JsonResponse({'data':'test class OK!'})
对于dispatch的扩展http://www.360doc.com/showweb/0/0/758246451.aspx
联系客服