1. 程式人生 > >django用戶權限操作

django用戶權限操作

ces 新增 超級 比較 請求方法 get else model har

第一步:創建數據庫和超級管理員,為了比較方便使用(裏面有些的是沒用的),額外新增

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 render
from django.core.urlresolvers import resolve #此方法可以將url地址轉換成url的name
from 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


django用戶權限操作