day22 2018-09-16html
1. 今日內容
CRM(客戶管理系統)
- 權限系統
- 業務邏輯
初戀版代碼:
是一個簡單的增刪改查項目,
其中大家能夠看一下批量導入功能是如何實現的。
2. 權限系統
1). 什麼叫權限?
對於一個系統來講,不一樣用戶能作的事兒不同!
用戶的權限不同。
2). 咱們爲何要講權限系統?
1. 只要是一個系統中涉及到不一樣的用戶,都會有權限系統的需求。
2. 我們目標是寫一套能夠適用任何系統的權限系統。
3. 只須要寫一次,跳槽用的着。
3). 針對Web開發來講,權限是什麼?
不一樣的權限 <--> 不一樣的URL
一個URL對應一個權限
4). 權限系統設計?RBAC(基於角色的權限控制系統)
1. 作項目
1. 分析需求
2. 表結構設計 程序 = 數據 + 業務邏輯
2. 初版表結構設計(詳見excel第一個sheet)
用戶
id name pwd
權限
id url
用戶-權限
id 用戶id 權限id
3. 初版的表結構設計有缺陷?
1). 管理權限的時候太複雜了
4. 第二版(詳見excel第二個sheet)
用戶
id name pwd
權限
id url
角色表
id title
角色-權限關係表
id 角色id 權限id
考慮到公司中存在兼任的現象,將用戶和角色表設計成多對多
用戶-角色表關係表
id 用戶id 角色id
5. 寫代碼
1). 爲了實現項目結構的解耦,把權限系統單獨寫成一個app
1. 建立APP
複習下Django中建立app的步驟
1. python manage.py startapp rbac
2. 在settings.py中註冊app
2). 執行兩條命令,把表結構同步到數據庫
1. python manage.py makemigrations
2. python manage.py migrate
3). 錄入數據
藉助Django Admin
預習下Django admin的用法
1. 建立超級用戶,用來登錄admin管理後臺
python manage.py createsuperuser
2. 將咱們本身寫的表註冊到Django admin中
在app/admin.py中按照固定的格式註冊model
def __str__(): 做用是將一條記錄在頁面上展現可讀的內容
class Meta:
verbose_name = "權限表"
verbose_name_plural = verbose_namepython
settings.py
1. 改中文
LANGUAGE_CODE = 'zh-hans'
2. 改時區
TIME_ZONE = 'Asia/Shanghai'
3. 錄入數據
4. Django admin進階
https://www.cnblogs.com/liwenzhou/p/9519321.html
4). 權限系統開發
1. Django 請求的生命週期
2. 權限系統功能分析
1. 用戶必須登錄
2. 用戶登錄成功以後
1. 拿到當前用戶都有哪些權限
3. 用戶訪問網站的頁面(url)
1. 判斷當前訪問的URL在不在該用戶的權限裏面
- 若是存在就放行
- 若是不存在就拒絕訪問
3. Django小知識點:
1. 視圖函數能夠拆分紅不一樣的py文件
2. Django項目查找html文件的順序
1. 先找項目根目錄下的templates
2. 找app目錄下的templates
4. 權限的校驗
1. 應該將權限的校驗功能放在中間件中的process_request()方法
2. 複習中間件
1. 中間件在Django中的settings.py註冊的
2. 如何自定義中間件
1. 按照規定的格式寫一箇中間件的類
2. 把本身寫的類註冊到Django中
RBAC --> admin --> 寫代碼 --> 權限的查詢 --> 權限的校驗
3. 菜單展現
1. 一級菜單
用戶沒有權限的菜單就不展現出來
1. 什麼能作菜單?
URL是固定的能夠做爲菜單,不固定就不能
2. 如何展現菜單?
在權限表中增長 is_menu和icon兩個字段
1. 取到當前用戶要顯示哪些菜單
2. 把該用戶的菜單顯示出來
4. font Awesome圖標
http://fontawesome.dashgame.com/數據庫
1. 字體圖標相比圖片的好處
1. 體積小
2. 放大不失真
3. 隨意修改顏色
2. 使用
5. Django模板語言
https://www.cnblogs.com/liwenzhou/p/7931828.html
1. filter 過濾器方法
對變量作一些修改/格式化等操做
2. 自定義filter函數
1. 在app目錄下新建一個名爲templatetags的python包
2. 建立一個py文件
3. 在py文件中定義一個函數,函數要按照filter的格式註冊
3. 使用自定義的filter方法
1. {% load py文件名 %}
2. {% 變量|自定義filter名 %}
4. Django 模板語言的 tags
1. 內置的static
防止把靜態文件的前綴寫死
{% load static %}
{% static '靜態文件的路徑' %}
2. 自定義simple_tag 相似於自定義filter
5. inclusion_tag
1. 當須要傳遞一些數據去渲染一部分HTML代碼的時候
6. 權限系統的使用django
8個步驟
1. 拷貝rbac這個app到項目中
2. 把rbac/migrations目錄下的遷移記錄都刪掉
3. 在項目中註冊rbac這個app
4. 建立數據庫遷移(執行那兩條命令)
5. 註冊admin,錄入數據 --> 自動發現並錄入權限URL
6. 在登陸流程中初始化權限信息
7. 註冊中間件
8. 在settings.py中設置權限相關的配置項
補充知識點:app
一、時間間隔
datetime.timedelta(days=7)函數
二、引入其餘寫好的項目以後,改改對應的配置就能夠啓動字體
三、excel文件網站
四、權限的表結構設計
url
五、註冊權限app設計
六、多對多字段設計到哪一個表中,就看哪一個正向查詢的多,就設計到哪一個表中
七、自定義管理類
八、django的一個請求的生命週期
九、把不一樣功能的視圖函數放到不一樣的py文件中
十、自定義filter方法必須新建一個python包
十一、字體圖標
十二、讓django admin的管理後臺變成中文