linRichielinRichie
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
    • Python学习指南
  • 快速开始

    • Python: 输入与输出 (I/O)
    • Python: 异常处理 try-except
    • Python: List深入概述
    • Python: 面向对象编程(OOP)
  • Python 语法库函数

    • 语法库目录
    • 库

      • library目录
      • argparse:解析命令行参数
      • difflib:比较序列并生成差异信息
      • dnspython: DNS处理库
      • IPy:IP地址处理库
      • logging:记录和管理日志信息
      • os:访问和操作操作系统
      • psutil:系统性能信息库
      • re:正则表达式库
      • smtplib:邮件发送库
    • 函数

      • function目录
      • any() 函数
      • input 函数
      • lambda 和 map 函数
      • reversed()函数
      • zip()函数
    • 语句

      • statement目录
      • import 语句
      • Try/Exception 异常
    • 概念

      • concept目录
      • 深拷贝与浅拷贝
      • 列表、字典与元组
      • 文件读写
      • IO: 输入与输出
      • 逻辑判断与条件语句
      • OOP 面向对象:class
      • OOP: 面向对象编程
  • SQLAlchemy

    • 获取insert或者update的id
  • Pandas

    • Pandas目录
    • Pandas:基础操作
    • Pandas:数据处理与转换
    • Pandas: 数据写入 excel 表格
  • Python前端框架

    • Flask

      • 1. Flask简介
      • 2. Flask程序基本结构
      • 3. Flask请求-响应循环
      • 4. flask案例: 框架网页查询IP
      • Python: Flask中的GitHub OAuth
    • Django

      • chapter-01:Django框架认识

        • 1.1 Django的产生背景
        • 1.2 MTV设计模式
        • 1.3 Django 主要功能模块
      • chapter-02:开发环境配置

        • 2.1 Python的安装与配置
        • 2.2 虚拟环境安装与配置
        • 2.3 Django安装与配置
        • 2.4 MySQL安装配置
      • chapter-03:项目框架搭建

        • 3.1 Django管理工具-创建项目骨架
        • 3.2 修改项目的默认配置
        • 3.3 初始化项目环境
      • chapter-04:ORM应用与原理剖析

        • 4.1 构建POST应用需要的数据集
        • 4.2 Model相关的概念和使用方法
        • 4.3 Model的查询操作API
        • 4.4 ORM实现原理
      • chapter-05:Django管理后台

        • 5.1 将Model注册到管理后台
        • 5.2 管理后台实现原理
      • chapter-06:视图

        • 6.1 视图基础
        • 6.2 视图的高级特性和快捷方法
        • 6.3 基于类的通用视图
      • chapter-07:模板系统

        • 7.1 模板系统基础
        • 7.2 模板语言
      • chapter-08:表单系统

        • 8.2 使用表单系统实现表单: ModelForm
      • chapter-09:用户认证系统

        • 9.1 用户与身份认证
        • 9.2 权限管理
        • 9.3 用户认证系统应用
      • chapter-10:Django路由系统

        • 10.1 路由系统基础
      • chapter-11:Django中间件

        • 11.1 中间件基础
  • Python例子

    • Python: Linux的Shell命令
    • Python: PEP8自动格式化代码
    • Python: pip操作
    • Python: 业务服务监控
    • Python: 从文件逐行读取数据
    • 将链表转换为字符串
    • Python: 检查URL是否能正常访问
    • Python: 爬取网易云音乐
    • Python: 读取目录下的所有内容
    • 案例研究:文本统计
  • Python爬虫

    • 数据解析工具:Xpath
  • 算法题

    • 02:两数相加
    • 09:回文数
    • 13:罗马数值转换为整数
    • 14:最长公共前缀

9.2 权限管理

  • 9.2 权限管理
    • 9.2.1 定义权限的数据表
    • 9.2.2 给Model添加自定义权限
      • 自定义权限
    • 9.2.3 权限的授予与校验
      • 1. 用户bbs权限操作
      • 2. 用户组bbs的权限操作
      • 3. 用户权限校验

Django会为应用程序中的每一个Model创建三个默认权限:添加、更改和删除。


9.2.1 定义权限的数据表

Django利用Permission表定义权限:auth_permission

  • 权限与用户的关联表:auth_user_user_permission
  • 权限与用户组的关联表:auth_group_permission
  • Django的权限时基于Model的。Django提供的是表级别的权限控制

9.2.2 给Model添加自定义权限

  • 在定义Model时指定自定义的权限:在Model的Meta中声明

class Topic(BaseModel):
    class Meta:
        permissions = (
            ('can_view_topic','Can View Topic'),
        )
        # permissions是一个二元组,第一个元素指定了权限的codename,第二个元素指定了权限的name

执行makemigrations migrate

python manage.py makemigrations post
python manage.py migrate

mysql> select * from auth_permission where content_type_id = 8;

自定义权限

  • 由于业务的需要,也可以使用代码的形式创建自定义权限,需要执行两个步骤

    • 获取某个应用的ContentType实例
    • 给定codename(不能与当前的codename存在重复)和name以及获取的ContentType创建Permission实例
  • 例子:给Tipic在添加一个权限

from post.models import Topic
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
codename = 'can_publish_topic'
name = 'Can Publish Topic'
content_type = ContentType.objects.get_for_model(Topic)
Permission.objects.create(codename=codename, name=name, content_type=content_type)

9.2.3 权限的授予与校验

添加,删除以及清空权限

1. 用户bbs权限操作

  • User实例添加属性需要使用:user_permissions属性,先获取User对象和Permission对象实例

    from django.contrib.auth.models import User, Permission
    bbs = User.objects.get(username='bbs')
    add_topic = Permission.objects.get(codename='add_topic')
    change_topic = Permission.objects.get(codename='change_topic')
    
  • get_all_permissions:查看User对象实例所授予的权限

    bbs.get_all_permissions()
    
  • user_permissions.set:设置当前用户的权限

    bbs.user_permessions.set(add_topic)
    
  • user_permissions.add:给User对象在拥有权限的基础上添加权限

    bbs.user_permissions.add(change_topic)
    bbs.user_permissions.add(add_topic, change_topic)
    
  • user_permissions.remove:删除权限

    bbs.user_permissions.remove(add_topic, change_topic)
    
  • user_permissions.clear(): 清空权限

    bbs.user_permissions.clear()
    

2. 用户组bbs的权限操作

  • permissions.set():给用户组bbs设置权限

    from django.contrib.auth.models import Group
    group_bbs = Group.objects.get(name='bbs')
    group_bbs.permissions.set([add_topic, change_topic])
    bbs.get_all_permissions()
    
    bbs = User.objects.get(username='bbs')
    bbs.get_all_permissions()
    

3. 用户权限校验

  • 可以使用User实例的has_perm或has_perms方法
  • has_perm:判断用户是否有某一项权限
  • has_perms:判断用户是否同时拥有多个权限
  • 格式
    • has_perm<app label>.<permission codename>
      • app label: 应用名
      • permission codename:权限编码
  • 返回:
    • True:正确

    • False:失败

      bbs.has_perm('post.add_topic')
      bbs.has_perms(['post.add_topic','post.change_topic'])
      
最近更新时间:
Prev
9.1 用户与身份认证
Next
9.3 用户认证系统应用