第十一篇: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')
"""应用"""
比如:第一次查询所有图书,你通过跨表查询查到需要的数据,直接存入到缓存中,
后续需要查数据,直接先去缓存查,如果有直接返回,如果没有,再去联表查询,
返回的时候同时再存入缓存。