RBAC、xadmin、django缓存以及信号

一、RBAC基于角色的访问控制

1、RBAC:是基于角色的访问控制(Role-Based Access Control)在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限,这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
2、后台管理中(公司内部系统):使用RBAC,基于角色的访问控制
前台(主站)的权限管理:权限、频率、认证、控制
3、RBAC的表设计
最初3张表
用户表、角色表、权限表
后来5张表
用户表 、角色表、权限表
用户表和角色表是多对多,需要建立第三张表
角色和权限是多对多,需要建立第三张表
再后来6张表
用户表 、角色表、权限表
用户表和角色表是多对多,需要建立第三张表
角色和权限是多对多,需要建立第三张表
用户和权限多对多,建立第三张表
4、django内置了rbac的6张表

auth_user:用户表,扩写
auth_group:角色表(组表)
auth_permission:权限表
auth_user_groups:用户对角色的中间表
auth_group_permissions:角色对权限的中间表
auth_user_user_permissions:用户对权限的中间表

二、Xadmin的使用

1、xadmin是Django的第三方扩展,可是使Django的admin站点使用更方便。
文档:https://xadmin.readthedocs.io/en/latest/index.html
2、区分django1.x版本和2.x版本安装
1.x:pip3 install xadmin
2,x:pip3 install git+git://github.com/sshwsfc/xadmin.git@django2
或者pip3 install https://codeload.github.com/sshwsfc/xadmin/zip/django2
3、django2.x+xadmin 2.x 环境搭建

#在app中注册
'xadmin',
'crispy_forms',
'reversion',
#修改国际化
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
#数据迁移
python3 manage.py makemigrations
python3 manage.py migrate
#配置路由信息
import xadmin
xadmin.autodiscover()
# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
                path('xadmin/', xadmin.site.urls)
            ]
#创建超级用户
python manage.py createsuperuser
#登录,访问地址,输入用户名密码进入
http://127.0.0.1:8000/xadmin/

4、美化

#写一个类
class BookClass():
    #该表展示的字段
    list_display = ['id', 'name', 'price','publish']
    #按照这些字段搜索
    search_fields = ['id','name']
    #按哪些字段过滤
    list_filter = ['is_delete']
    #可以把数据导出成excel,json,xml格式
    list_export = ('xls', 'xml', 'json')
    #list_export设置为None来禁用数据导出功能
    list_export_fields = ('id', 'name', 'price')
    data_charts = {
          "order_amount": {
          'title': '随便写',
          "x-field": "price",
          "y-field": ('publish',),
          "order": ('id',)
      },
  }
#注册
xadmin.site.register(models.Book,BookClass)

5、python虚拟环境安装详解
http://www.xuexianqi.top/archives/126.html

django缓存

1、缓存位置
(1)内存中

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 指定缓存使用的引擎
        'LOCATION': 'unique-snowflake',  # 写在内存中的变量的唯一值 
        'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

(2)文件中(硬盘中)

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定缓存使用的引擎
        'LOCATION': '/var/tmp/django_cache',  # 指定缓存的路径
        'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

(3)数据库缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 指定缓存使用的引擎
        'LOCATION': 'cache_table',  # 数据库表    
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

(4)redis中
(5)通过配置,设置缓存位置

#在settings.py中配置
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定缓存使用的引擎
        'LOCATION': r'D:\ATM',  # 指定缓存的路径
        'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

2、缓存粒度
(1)三种粒度:整站缓存、单页面缓存、局部缓存
(2)三种缓存方式

#单页面缓存
from django.views.decorators.cache import cache_page
@cache_page(5)
def index(request):
    ctime = time.time()
    return render(request,'index.html',context={'ctime':ctime})

#页面中某个位置缓存(局部缓存)

当前时间是:{{ ctime }}

{% load cache %} {% cache 3 'xxx' %} # 缓存3秒,xxx为唯一key 这一部分用缓存,时间为{{ ctime }} {% endcache %} #整站缓存(两个中间件) #在settings.py中配置 'django.middleware.cache.UpdateCacheMiddleware', # 第一,重写了process_response ‘。。。’ django.middleware.cache.FetchFromCacheMiddleware', # 最后,重写了process_request #在settings.py中要配置缓存过期时间 CACHE_MIDDLEWARE_SECONDS=5

(3)前后端分离后缓存使用

1 查出一堆json格式数据,链表查了8个表 
2 前后端分离以后,
    -只需要会如何是把字典,字符串,对象放到缓存中,
    -如何取出来
4 具体使用
from django.core.cache import cache
class BookView(APIView):
    def get(self, request):
        res_data = cache.get('book_list_dix',)
        if res_data:  # 有缓存,直接返回
            print('走了缓存')
            return Response(res_data)
        else:  # 没有缓存,再走数据库
            book_list = models.Book.objects.all()
            ser = serializer.BookSer(book_list, many=True)
            # 想把ser.data缓存起来
            cache.set('book_list_dix', ser.data,100)
            print('没走缓存')
            return Response(ser.data)
        
5 cache可以缓存所有数据类型,包括自定义的类(pickle)

你可能感兴趣的:(RBAC、xadmin、django缓存以及信号)