项目准备流程和django权限六表

摘要:
项目准备过程和六张django权限表1.项目准备1.创建一个django项目2.创建一个数据库——在init文件中声明mysql——或者直接在设置中配置声明项目名称/应用程序名称。init.pyimportpymysqlpymysql。install_as_MySQL db()或在设置中配置和声明。py#在配置(推荐)importpy mysqlpy mysql.inst中直接声明mysql

项目准备流程 和 django权限六表

一、项目准备

1.创建django项目

2、创建数据库 —— init文件中声明mysql —— 也可以直接在settings中配置声明
项目名/应用名.init.py

import pymysql
pymysql.install_as_MySQLdb()

或在settings.py中配置并声明

# 直接在配置中声明mysql(建议这样写)
import pymysql
pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dg_proj',  # 数据库名
        'USER': 'root',
        'PASSWORD': '',
    }
}

3.配置国际化

# 国际化 汉化
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

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

​ 项目中自新建media文件夹

# 自己配置的 图像文件夹和路经,用户上传等图像文件保存在此;
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

5、drf框架相关配置

配置文件中注册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 和 自定义的异常模块 —— 注册 **

img

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

6、项目下总路由

# 导入 include,进行路由分发
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')),
	
    # 配置 media 开放路径
    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(基于角色的访问控制)

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

2.表分析

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

img

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

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

img

img

img

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

models.py

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'

img

5、数据库迁移失败问题

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

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

test.py

# 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)

免责声明:文章转载自《项目准备流程和django权限六表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇rabbitMQ Connection timed outBI笔记之SSAS库Process的几种方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

django中时间区间过滤,排序

1.过滤下载 pip install django-filter 2.下载后注册 INSTALLED_APPS=['django_filters',] 3.导入rest_framework from django_filters importrest_framework classDoctorsFilter(rest_framework.Filter...

Django的Settings中Templates的路径设置

## mysite/mysite/settings.py## mysite是项目名TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templa...

django 日志logging的配置以及处理

日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用途。在Java开发中通常用log4j,logback等第三方组件。那么在django中是怎么处理日志?django利用的就是Python提供的logging模块,但django中要用logging,还得有一定的配置规则,需要在setting中设置。 log...

Django微信小程序后台开发教程

本文链接:https://blog.csdn.net/qq_43467898/article/details/83187698Django微信小程序后台开发教程1 申请小程序,创建hello world小程序2 添加交互框和按钮3 在服务器配置hello django4 实现计算器接口5 配置服务器将后端与微信小程序连接5.1 uwsgi配置5.2 htt...

Python学习第118天(Django回头看:MVCMTV、Django初步、static、url命名、分区)

今天开始重新复习,内容看的也更连贯一些,下面开始内容复述,先说一下MTV和MVC的问题 MVC(modles views controller)即web应用模型,可以指代各种各样的模型 modles即为模型 views 视图,特指用户看到的html文件 controller控制器 MTV(modles template views)即为Django模型,...

使用pycharm创建django项目

一. 安装好Python环境,步骤参照另一个博客: Windows环境selenium+Python环境配置; 二. 安装好virtualenv虚拟环境: 1.安装:命令行到python目录,运行:pip3 install virtualenv;--安装       pip3 install virtualenvwrapper # 这是对virtualen...