项目准备流程 和 权限六表

Posted xp1315458571

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目准备流程 和 权限六表相关的知识,希望对你有一定的参考价值。

一、项目准备

1. 创建django项目

2. 创建数据库 —— init文件中声明mysql —— settings中配置数据库

import pymysql
pymysql.install_as_MySQLdb()
# 为该项目创建一个数据库
DATABASES = {
    default: {
        ENGINE: django.db.backends.mysql,
        NAME: ‘dg_proj,
        USER: root,
        PASSWORD: 123
    }
}

3. 配置中国际化

技术图片
# 国际化 汉化
LANGUAGE_CODE = zh-hans

TIME_ZONE = Asia/Shanghai

USE_I18N = True

USE_L10N = True

USE_TZ = False
View Code

4. 创建media文件夹 —— 配置中配置

# 自己配置的 图像文件夹和路经
MEDIA_URL = /media/
MEDIA_ROOT = os.path.join(BASE_DIR, media)

5. drf相关

# app中注册drf

技术图片
INSTALLED_APPS = [
    django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    api.apps.ApiConfig,

    rest_framework,
]
View Code

# 新建utils文件夹存放自定义功能 —— 放入自己二次封装的responces 和 自定义的异常模块 —— 注册 

技术图片

 

 

 

REST_FRAMEWORK = {
    # 全局配置异常模块
    EXCEPTION_HANDLER: utils.exception.exception_handler,
   
}

6.开项目下总路由

from django.conf.urls import url, include
from django.contrib import admin

from django.views.static import serve
from django.conf import settings
urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^api/, include(api.urls)),

    url(r^media/(?P<path>.*), serve, {document_root: settings.MEDIA_ROOT}),
]

7.api下子路由

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r^test/$, views.TestAPIView.as_view()),
    url(r^test1/$, views.TestAuthenticatedAPIView.as_view()),
    url(r^test2/$, views.TestAuthenticatedOrReadOnlyAPIView.as_view()),
    url(r^test3/$, views.TestAdminOrReadOnlyAPIView.as_view()),
]

二 、权限六表

1.认证方式

基于用户权限访问控制的认证 - RBAC - Role-Based Access Control
自己了解:基于auth的认证规则
基于jwt的认证责任——企业常用
Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则、五表规则,Django采用的是六表规则

2. 表分析

三表:用户表、角色表、权限表
五表:用户表、角色表、权限表、用户角色关系表、角色权限关系表
六表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表

技术图片

 

 

 

3. 六表间信息交互(正向反向查)

用户表:访问角色groups,访问权限user permissions
角色表:访问用户user_set,访问权限permissions
权限表:访问用户user_set,访问角色group_set(这一个源码中无提示)

技术图片

 技术图片

 技术图片

4.models中自定义用户表测试

from django.db import models
from django.contrib.auth.models import AbstractUser,User
class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)

    class Meta:
        db_table = api_user
        verbose_name = 用户表  # admin中用来显示的表名
        verbose_name_plural = verbose_name  # 表名字最后不加s

    def __str__(self):
        return self.username  # 让admin中每个用户名显示自己用户名,不写默认名全都一样
# 写完后去settings中配置自定义的user表,然后数据库迁移
AUTH_USER_MODEL = ‘api.User‘

技术图片

 

 

5.数据库迁移失败问题

重点:如果自定义User表后,再另一个项目中采用原生User表,完成数据库迁移时,可能失败
  1)卸载Django重新装
  2)将django.contrib下面的admin、auth下的数据库迁移记录文件清空,不要删除init文件

6.写测试脚本 测试六表间信息交互

技术图片
# django脚本话启动
import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dg_proj.settings")
django.setup()

#用户访问其他表
from api import models
user = models.User.objects.first()  # type: models.User
print(user.username)
print(user.groups.first().name)
print(user.user_permissions.first().name)

# 角色表访问其他表
from django.contrib.auth.models import Group
group = Group.objects.first()
print(group.name)
print(group.user_set.first().username)
print(group.permissions.first().name)

# 权限表访问其他表
from django.contrib.auth.models import Permission
p_16 = Permission.objects.filter(pk=16).first()
print(p_16.user_set.first().username)
p_17 = Permission.objects.filter(pk=17).first()
print(p_17.group_set.first().name)
View Code

 

以上是关于项目准备流程 和 权限六表的主要内容,如果未能解决你的问题,请参考以下文章

drf 权限认证

gitlab 权限说明

django的RBAC认证z;自定义auth_user表;认证组件权限组件源码分析;认证组件;权限组件

Shiro 安全框架详解二(概念+权限案例实现)

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程