第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增
chioces ,
per_method ,
argument_list
# 用户权限# 建立一个权限表,将映射关系存到数据库中class Permission(models.Model): identifier = models.CharField(max_length=40, unique=True) USERNAME_FIELD = ‘identifier‘ name = models.CharField("权限名称", max_length=64,null=True) url = models.CharField(‘URL名称‘, max_length=255,null=True) #chioces = ((1, ‘GET‘), (2, ‘POST‘)) #per_method = models.SmallIntegerField(‘请求方法‘, choices=chioces, default=1) #argument_list = models.CharField(‘参数列表‘, max_length=255, help_text=‘多个参数之间用英文半角逗号隔开‘, blank=True, null=True) describe = models.CharField(‘描述‘, max_length=255,null=True) def __str__(self): return self.name class Meta: verbose_name = ‘权限表‘ verbose_name_plural = verbose_name #权限信息,这里定义的权限的名字,后面是描述信息,描述信息是在django admin中显示权限用的 permissions = ( (‘views_user_list‘, ‘查看用户信息表‘), (‘views_user_info‘, ‘查看用户详细信息‘), )
创建数据库和超级管理员
python manage.py makemigrations python manage.py migrate python manage.py createsuperuser 第二步:创建验证权限的代码
from django.shortcuts import renderfrom django.core.urlresolvers import resolve #此方法可以将url地址转换成url的namefrom user.models import Permission def perm_check(request, *args, **kwargs): url_obj = resolve(request.path_info) url_name = url_obj.url_name #获取url地址的名字 perm_name = ‘‘ #权限必须和urlname配合使得 if url_name: #获取请求方法,和请求参数 url_method, url_args = request.method, request.GET print("11111111111") if url_method == ‘GET‘: url_method =1 else: url_method =2 #将各个参数的值用逗号隔开组成字符串,因为数据库中是这样存的 后期可以用一下 # for i in url_args: # url_args_list.append(str(url_args[i])) # url_args_list = ‘,‘.join(url_args_list) #操作数据库 get_perm = Permission.objects.filter(url=url_name,per_method=url_method) if get_perm: for i in get_perm: perm_name = i.name #获取权限名称 perm_str = ‘user.%s‘ % perm_name if request.user.has_perm(perm_str): print(‘====》权限已匹配‘) return True else: print(‘---->权限没有匹配‘) return False else: return False else: return False #没有权限设置,默认不放过 def check_permission(fun): #定义一个装饰器,在views中应用 def wapper(request, *args, **kwargs): if perm_check(request, *args, **kwargs): #调用上面的权限验证方法 return fun(request, *args, **kwargs) return render(request, ‘user/403.html‘, locals()) return wapper第三步:注册需要权限操作的数据库表,在admin里面
from django.contrib import admin # Register your models here.from . import models admin.site.register([models.UserInfo,models.Permission]) 第四步:使用
from user.userTool.permission import check_permission
@check_permission
原文地址:https://www.cnblogs.com/ylinhuang/p/10185395.html
时间: 2024-11-02 22:54:51