django用户权限操作
第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增
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用户权限操作的更多相关文章
- T-Sql(七)用户权限操作(grant)
一般数据库的权限操作我们很少用,除非一些大型的项目,需要给数据库配置不同的用户及权限,防患于未然,今天我们就来了解下t-sql中配置用户权限操作. 先看示例代码: --创建登录名 create log ...
- mysql用户权限操作
mysql用户权限操作1.创建用户mysql -urootcreate database zabbix default charset utf8;grant all on zabbix.* to za ...
- [Django]用户权限学习系列之权限管理界面实现
本系列前三章: http://www.cnblogs.com/CQ-LQJ/p/5604331.htmlPermission权限基本操作指令 http://www.cnblogs.com/CQ-LQJ ...
- [Django]用户权限学习系列之设计自有权限管理系统设计思路
若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...
- [Django]用户权限学习系列之User权限基本操作指令
针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...
- [Django]用户权限学习系列之Permission权限基本操作指令
若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODU ...
- mysqli用户权限操作
此操作指令在 mysql 的数据库中 所以要 use mysql 查询mysqli中所有用户的权限 select host,user form user; 添加用户 grant all privil ...
- MongoDB用户权限操作语法及示例
1.创建用户 1.1.语法格式: 1.1.1.格式及例子 >db.createUser( { user: "<name>", pwd: "<cle ...
- SQLServer —— 用户权限操作
说明 以下操作都是基于SQLServer登陆验证方式登陆.而且操作员都是 sa. 一.添加登陆账号 use master go ' 第一个(xu)是登陆名,第二个(123456)是登陆密码. 执行语句 ...
随机推荐
- js vue 请求
. Vue 的 GET 请求 var vm = new Vue({ el: '#app', data: { resp: {}, api_url: '/index', }, methods: { get ...
- vue的渐进式理解
链接:https://www.zhihu.com/question/51907207/answer/136559185 渐进式代表的含义是:主张最少. 每个框架都不可避免会有自己的一些特点,从而会对使 ...
- python基础——2、python应用(随机、异常)——(YZ)
本次的内容为python的应用,关于随机.异常的应用,均多应用列表. 习题一 1.初始化一个数据集,包括5-10位同学的成绩数据(数据类型不限),数据格式如下: 学号 姓名 Java C语言 Pyth ...
- 浏览器输入url回车后,会发生什么?
通常我们想访问某一个网址,我们会在浏览器中输入它的域名,然后点击回车进行跳转,这样就可以进到网站的主页,看似简单的两步,其实背后都需要大量的代码在运行,支持,才能完成!那浏览器到底都做了哪些事呢? 一 ...
- devC++代码格式化对齐的快捷键
devC++代码格式化对齐的快捷键是ctrl + shift + a ctrl + 左右键可以使光标移动一个单词的距离 shirt + 左右键可以选中光标左右的一个字符
- Angular2+AngularJS
AngularJS 系列: 1.angular.module 的定义 var mapApp = angular.module("positionSalaryEditApp",[&q ...
- HanLP Analysis for Elasticsearch
基于 HanLP 的 Elasticsearch 中文分词插件,核心功能: 兼容 ES 5.x-7.x: 内置词典,无需额外配置即可使用: 支持用户自定义词典: 支持远程词典热更新(待开发): 内置多 ...
- nis+kerberos 实现服务验证
1.NIS部分 1.1 简介 NIS(Network Information Service,or Yellow Page or YP) 网络信息服务,由sun公司开发并授权给unix供应商, ...
- MQTT研究之EMQ:【基础研究】
EMQ版本V2, emqttd-centos7-v2.3.11-1.el7.centos.x86_64.rpm 下载地址:http://emqtt.com/downloads/2318/centos7 ...
- python 画图工具matplotlib 去掉坐标轴和坐标的方法
1. 去掉坐标轴的方法: plt.axis('off') 2.去掉刻度的方法: plt.xticks([]) plt.yticks([]) 以上语句需要将其置于 plt.show() 之前,plt.i ...