1. 程式人生 > 其它 >第十一篇:DRF之基於角色的許可權控制和django快取

第十一篇: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')

"""應用"""
比如:第一次查詢所有圖書,你通過跨表查詢查到需要的資料,直接存入到快取中,
後續需要查資料,直接先去快取查,如果有直接返回,如果沒有,再去聯表查詢,
返回的時候同時再存入快取。