一、项目准备
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
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‘, ]
# 新建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)
原文地址:https://www.cnblogs.com/xp1315458571/p/11716183.html
时间: 2024-10-08 11:45:59