第十一篇:DRF之基于角色的权限控制和django缓存

第十一篇:DRF之基于角色的权限控制和django缓存

一、基于角色的权限控制(django内置的auth体系)

1、RBAC介绍

简单来说,RBAC 是一种基于角色的访问控制(Role-Based Access Control ),一般用户公司内部系统。

2、django内置的RBAC图解

django中内置了一套基于RBAC 的权限系统。我们每次执行数据库迁移命令时,总会创建出多张表,效果图如下所示。

django中提供了6张表,来实现角色的访问控制。

3、django内置的RBAC表

效果如下。

二、django缓存

1、前后端不分离

我们在settings.py中进行如下配置。【以缓存到文件为例】

CACHES = {
    'default': {
         # 指定缓存使用的引擎
         'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
         # 指定缓存的路径
         'LOCATION': 'E:\django_cache',
         # 缓存超时时间(默认为300秒,None表示永不过期)
         'TIMEOUT': 300,
         'OPTIONS': {
            # 最大缓存记录的数量(默认300)
            'MAX_ENTRIES': 300,
            # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
            'CULL_FREQUENCY': 3,
        }
     }
}
  • 单页面缓存
"""单页面缓存只需要添加装饰器即可"""
from django.views.decorators.cache import cache_page

@cache_page(5)  # 局部缓存5秒钟
def test1(request):
    import time
    current_time = time.time()
    return render(request, 'test.html', context={'current_time': current_time})

同时,我们在配置的文件中,看到缓存数据。

  • 局部缓存
<body>
    <p>测试的时间数据{{ current_time }}</p>
<hr>
    {% load cache %}
    <!--5代表5秒钟,name为唯一key值,只要不重复即可随便取-->
    {% cache 5 'name' %}
        <p>局部缓存{{ current_time }}</p>
    {% endcache %}
</body>

  • 全站缓存
"""只需要添加两个中间件即可"""
MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    ...
    'django.middleware.cache.FetchFromCacheMiddleware'
]

# 全站缓存时间 5秒钟
CACHE_MIDDLEWARE_SECONDS = 5

2、前后端分离

from django.core.cache import cache
 
# 需要存入缓存时
"""内部使用pickle模块,甚至可以存储对象"""
cache.set('key',value可以是任意数据类型)
# 去出缓存时
cache.get('key')

"""应用"""
比如:第一次查询所有图书,你通过跨表查询查到需要的数据,直接存入到缓存中,
后续需要查数据,直接先去缓存查,如果有直接返回,如果没有,再去联表查询,
返回的时候同时再存入缓存。
posted @ 2021-07-28 11:58  YangYi215  阅读(407)  评论(0编辑  收藏  举报