第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增

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用户权限操作的更多相关文章

  1. T-Sql(七)用户权限操作(grant)

    一般数据库的权限操作我们很少用,除非一些大型的项目,需要给数据库配置不同的用户及权限,防患于未然,今天我们就来了解下t-sql中配置用户权限操作. 先看示例代码: --创建登录名 create log ...

  2. mysql用户权限操作

    mysql用户权限操作1.创建用户mysql -urootcreate database zabbix default charset utf8;grant all on zabbix.* to za ...

  3. [Django]用户权限学习系列之权限管理界面实现

    本系列前三章: http://www.cnblogs.com/CQ-LQJ/p/5604331.htmlPermission权限基本操作指令 http://www.cnblogs.com/CQ-LQJ ...

  4. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  5. [Django]用户权限学习系列之User权限基本操作指令

    针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...

  6. [Django]用户权限学习系列之Permission权限基本操作指令

    若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODU ...

  7. mysqli用户权限操作

    此操作指令在 mysql 的数据库中 所以要 use mysql 查询mysqli中所有用户的权限 select host,user form user;  添加用户 grant all privil ...

  8. MongoDB用户权限操作语法及示例

    1.创建用户 1.1.语法格式: 1.1.1.格式及例子 >db.createUser( { user: "<name>", pwd: "<cle ...

  9. SQLServer —— 用户权限操作

    说明 以下操作都是基于SQLServer登陆验证方式登陆.而且操作员都是 sa. 一.添加登陆账号 use master go ' 第一个(xu)是登陆名,第二个(123456)是登陆密码. 执行语句 ...

随机推荐

  1. 手机游戏引擎 Cocos

    Cocos是全球最受欢迎的移动游戏开发解决方案,整合了Cocos 2d-x.Cocos 2d-js.Cocos Studio.Cocos Code IDE等框架及工具,无论您是开发新手还是行业资深人士 ...

  2. 跳台阶(JAVA)

    跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:典型的动态规划问题,动态规划问题最关键的是把事件中的各种情形抽象为状态,然后找到前后 ...

  3. HTML5中的语义标签兼容IE8以及更低版本的浏览器

    看某教程,说让HTML5的这些语义标签能够兼容低版本的浏览器,原文是“你可以设置css的display属性为block”.很好理解,就设置css样式为block嘛,那就直接设置咯: header, s ...

  4. WinForm中使用BackgroundWorker异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  5. C#利用for循环打印图形练习题

    (1) namespace ConsoleApp2 { class Program { static void Main(string[] args) { ; i < ; i++)//外层循环控 ...

  6. MQTT研究之EMQ:【SSL证书链验证】

    1. 创建证书链(shell脚本) 客户端证书链关系: rootCA-->chainca1-->chainca2-->chainca3 ca caCert1 caCert2 caCe ...

  7. 斐讯N1折腾记

    斐讯N1折腾记:运行 Linux 及优化  2018-06-23  37条评论  4,445次阅读  11人点赞 最后更新时间:2019年03月10日 咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了 ...

  8. c# 使用http摘要认证

    .net 使用http摘要认证,返回json数据 using System; using System.Collections.Generic; using System.Linq; using Sy ...

  9. JAVA 注解和反射

    通过反射来获取类 Class MyTest{ private String name; public String showName{ System.out.println(this.name); } ...

  10. python3-基础3

    列表 list[ ]  作用   --  存储多个值,多个元素 索引   list[num] 切片  list[:3] 追加  list.append('lalaal') 删除  list.pop() ...