RBAC诗轻、xadmin钳宪、django緩存以及信號(hào)

一、RBAC基于角色的訪問控制

1扳炬、RBAC:是基于角色的訪問控制(Role-Based Access Control)在RBAC中吏颖,權(quán)限與角色相關(guān)聯(lián),用戶通過成為適當(dāng)角色的成員而得到這些角色的權(quán)限恨樟,這就極大地簡(jiǎn)化了權(quán)限的管理半醉。這樣管理都是層級(jí)相互依賴的掰茶,權(quán)限賦予給角色暂筝,而把角色又賦予用戶搓彻,這樣的權(quán)限設(shè)計(jì)很清楚咏雌,管理起來很方便啰脚。
2脉顿、后臺(tái)管理中(公司內(nèi)部系統(tǒng)):使用RBAC庆揪,基于角色的訪問控制
前臺(tái)(主站)的權(quán)限管理:權(quán)限境析、頻率匙握、認(rèn)證咆槽、控制
3、RBAC的表設(shè)計(jì)
最初3張表
用戶表圈纺、角色表秦忿、權(quán)限表
后來5張表
用戶表 、角色表蛾娶、權(quán)限表
用戶表和角色表是多對(duì)多灯谣,需要建立第三張表
角色和權(quán)限是多對(duì)多,需要建立第三張表
再后來6張表
用戶表 蛔琅、角色表胎许、權(quán)限表
用戶表和角色表是多對(duì)多,需要建立第三張表
角色和權(quán)限是多對(duì)多,需要建立第三張表
用戶和權(quán)限多對(duì)多辜窑,建立第三張表
4钩述、django內(nèi)置了rbac的6張表

auth_user:用戶表,擴(kuò)寫
auth_group:角色表(組表)
auth_permission:權(quán)限表
auth_user_groups:用戶對(duì)角色的中間表
auth_group_permissions:角色對(duì)權(quán)限的中間表
auth_user_user_permissions:用戶對(duì)權(quán)限的中間表

二穆碎、Xadmin的使用

1牙勘、xadmin是Django的第三方擴(kuò)展,可是使Django的admin站點(diǎn)使用更方便所禀。
文檔:https://xadmin.readthedocs.io/en/latest/index.html
2方面、區(qū)分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 環(huán)境搭建

#在app中注冊(cè)
'xadmin',
'crispy_forms',
'reversion',
#修改國(guó)際化
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
#數(shù)據(jù)遷移
python3 manage.py makemigrations
python3 manage.py migrate
#配置路由信息
import xadmin
xadmin.autodiscover()
# version模塊自動(dòng)注冊(cè)需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
                path('xadmin/', xadmin.site.urls)
            ]
#創(chuàng)建超級(jí)用戶
python manage.py createsuperuser
#登錄北秽,訪問地址葡幸,輸入用戶名密碼進(jìn)入
http://127.0.0.1:8000/xadmin/

4最筒、美化

#寫一個(gè)類
class BookClass():
    #該表展示的字段
    list_display = ['id', 'name', 'price','publish']
    #按照這些字段搜索
    search_fields = ['id','name']
    #按哪些字段過濾
    list_filter = ['is_delete']
    #可以把數(shù)據(jù)導(dǎo)出成excel贺氓,json,xml格式
    list_export = ('xls', 'xml', 'json')
    #list_export設(shè)置為None來禁用數(shù)據(jù)導(dǎo)出功能
    list_export_fields = ('id', 'name', 'price')
    data_charts = {
          "order_amount": {
          'title': '隨便寫',
          "x-field": "price",
          "y-field": ('publish',),
          "order": ('id',)
      },
  }
#注冊(cè)
xadmin.site.register(models.Book,BookClass)

5床蜘、python虛擬環(huán)境安裝詳解
http://www.xuexianqi.top/archives/126.html

django緩存

1辙培、緩存位置
(1)內(nèi)存中

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 指定緩存使用的引擎
        'LOCATION': 'unique-snowflake',  # 寫在內(nèi)存中的變量的唯一值 
        'TIMEOUT': 300,  # 緩存超時(shí)時(shí)間(默認(rèn)為300秒,None表示永不過期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大緩存記錄的數(shù)量(默認(rèn)300)
            'CULL_FREQUENCY': 3,  # 緩存到達(dá)最大個(gè)數(shù)之后,剔除緩存?zhèn)€數(shù)的比例邢锯,即:1/CULL_FREQUENCY(默認(rèn)3)
        }
    }
}

(2)文件中(硬盤中)

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定緩存使用的引擎
        'LOCATION': '/var/tmp/django_cache',  # 指定緩存的路徑
        'TIMEOUT': 300,  # 緩存超時(shí)時(shí)間(默認(rèn)為300秒,None表示永不過期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大緩存記錄的數(shù)量(默認(rèn)300)
            'CULL_FREQUENCY': 3,  # 緩存到達(dá)最大個(gè)數(shù)之后扬蕊,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
        }
    }
}

(3)數(shù)據(jù)庫(kù)緩存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 指定緩存使用的引擎
        'LOCATION': 'cache_table',  # 數(shù)據(jù)庫(kù)表    
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大緩存記錄的數(shù)量(默認(rèn)300)
            'CULL_FREQUENCY': 3,  # 緩存到達(dá)最大個(gè)數(shù)之后丹擎,剔除緩存?zhèn)€數(shù)的比例尾抑,即:1/CULL_FREQUENCY(默認(rèn)3)
        }
    }
}

(4)redis中
(5)通過配置,設(shè)置緩存位置

#在settings.py中配置
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定緩存使用的引擎
        'LOCATION': r'D:\ATM',  # 指定緩存的路徑
        'TIMEOUT': 300,  # 緩存超時(shí)時(shí)間(默認(rèn)為300秒,None表示永不過期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大緩存記錄的數(shù)量(默認(rèn)300)
            'CULL_FREQUENCY': 3,  # 緩存到達(dá)最大個(gè)數(shù)之后蒂培,剔除緩存?zhèn)€數(shù)的比例再愈,即:1/CULL_FREQUENCY(默認(rèn)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})

#頁面中某個(gè)位置緩存(局部緩存)
<body>
當(dāng)前時(shí)間是:{{ ctime }}
<hr>
{% load cache %}
{% cache 3 'xxx' %}  # 緩存3秒,xxx為唯一key
    這一部分用緩存媳荒,時(shí)間為{{ ctime }}
{% endcache %}
</body>

#整站緩存(兩個(gè)中間件)
#在settings.py中配置
'django.middleware.cache.UpdateCacheMiddleware',  # 第一抗悍,重寫了process_response
‘。钳枕。缴渊。’
django.middleware.cache.FetchFromCacheMiddleware',  # 最后鱼炒,重寫了process_request
#在settings.py中要配置緩存過期時(shí)間
CACHE_MIDDLEWARE_SECONDS=5

(3)前后端分離后緩存使用

1 查出一堆json格式數(shù)據(jù)衔沼,鏈表查了8個(gè)表 
2 前后端分離以后,
    -只需要會(huì)如何是把字典,字符串俐巴,對(duì)象放到緩存中骨望,
    -如何取出來
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:  # 沒有緩存欣舵,再走數(shù)據(jù)庫(kù)
            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可以緩存所有數(shù)據(jù)類型擎鸠,包括自定義的類(pickle)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缘圈,隨后出現(xiàn)的幾起案子劣光,更是在濱河造成了極大的恐慌,老刑警劉巖糟把,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢涡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡遣疯,警方通過查閱死者的電腦和手機(jī)雄可,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缠犀,“玉大人数苫,你說我怎么就攤上這事”嬉海” “怎么了虐急?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滔迈。 經(jīng)常有香客問我止吁,道長(zhǎng),這世上最難降的妖魔是什么燎悍? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任敬惦,我火速辦了婚禮,結(jié)果婚禮上间涵,老公的妹妹穿的比我還像新娘仁热。我一直安慰自己,他們只是感情好勾哩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布抗蠢。 她就那樣靜靜地躺著,像睡著了一般思劳。 火紅的嫁衣襯著肌膚如雪迅矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天潜叛,我揣著相機(jī)與錄音秽褒,去河邊找鬼壶硅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛销斟,可吹牛的內(nèi)容都是我干的庐椒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚂踊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼约谈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起犁钟,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤棱诱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后涝动,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迈勋,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年醋粟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靡菇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昔穴,死狀恐怖镰官,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吗货,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布狈网,位于F島的核電站宙搬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拓哺。R本人自食惡果不足惜勇垛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望士鸥。 院中可真熱鬧闲孤,春花似錦、人聲如沸烤礁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脚仔。三九已至勤众,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲤脏,已是汗流浹背们颜。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工吕朵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窥突。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓努溃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阻问。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茅坛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容