Django 中使用权限认证

时间:2019-08-06
本文章向大家介绍Django 中使用权限认证,主要包括Django 中使用权限认证使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

权限认证

权限概念

"""
在实际开发中,项目中都有后台运营站点,运营站点里面会存在多个管理员,
那么不同的管理员会具备不同的任务和能力,那么要实现这样的管理员功能,那么就需要了解权限机制了.
在开发中, 一般现在流行的权限机制有2种: RBAC[基于角色(分组)的权限认证]和Auth认证[授权认证机制]
我们使用的django框架内部集成的Auth模块实际上就是基于RBAC开发出来的权限认证机制.

在开发中,实现RBAC权限机制,一般有2种不同的设计方式:分别是3表和5表


基于角色的权限访问控制(Role-Based Access Control)
"""
xamdin可视化添加测试权限的用户
"""
1.登录xadmin后台管理
2.新增账号:zero/zero1234
3.修改为在职状态
4.添加组group:销售部 - 权限操作轮播图
5.分配zero到销售部
"""

基于Django的权限系统

新建user应用
"""
1.终端前往luffyapi/apps所在目录
>: python ../../manage.py startapp user

2.settings/dev.py中注册user
INSTALLED_APPS = [
    # ...
    'user'
]

3.分发路由
1)主路由urls.py
from django.urls import include
urlpatterns = [
    # ...
    path('user/', include('user.urls')),
]
2)子路由
from django.urls import path, re_path
from . import views
urlpatterns = [
]
"""
自定义user表:user.models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    mobile = models.CharField(verbose_name="手机号码", max_length=15, unique=True)
    avatar = models.ImageField(upload_to='avatar', verbose_name='用户头像', null=True, blank=True, help_text="头像图片的大小规格:256x256,或者对应的比例的图片")
    class Meta:
        db_table = 'luffy_user'
        verbose_name = '用户'
        verbose_name_plural = verbose_name
修改auth认证的user表:settings/dev.py
# 这里是固定写法:模块.继承AbstractUser的自定义User表
AUTH_USER_MODEL = 'user.User'
数据库迁移:因为之前已经完成数据库迁移,auth认证的用户表指向系统,所以要重构数据库
"""
1) 在项目根目录下的终端
>: python manage.py makemigrations
>: python manage.py migrate

2) 出现冲突

3)清空迁移记录:以下目录的所有迁移记录文件
django/contrib/admin/migrations
django/contrib/auth/migrations
xadmin/migrations
reversion/migrations
user/migrations
home/migrations

4)清空数据库所有表

5)重新数据库迁移
>: python manage.py makemigrations
>: python manage.py migrate
"""
新建管理员用户:大luffyapi文件夹
>: python manage.py createsuperuser
格式化xadmin显示表信息
# 1.user.__init__.py
    default_app_config = "user.apps.UserConfig"
#2.user.apps.py
from django.apps import AppConfig
class UserConfig(AppConfig):
    name = 'user'
    verbose_name = '用户中心'

$flag 上一页 下一页