day22 2018-09-16
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_name
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. 權限系統的使用
8個步驟
1. 拷貝rbac這個app到項目中
2. 把rbac/migrations目錄下的遷移記錄都刪掉
3. 在項目中注冊rbac這個app
4. 創建數據庫遷移(執行那兩條命令)
5. 注冊admin,錄入數據 --> 自動發現並錄入權限URL
6. 在登錄流程中初始化權限信息
7. 注冊中間件
8. 在settings.py中設置權限相關的配置項
補充知識點:
1、時間間隔
datetime.timedelta(days=7)
2、引入其他寫好的項目之后,改改對應的配置就可以啟動
3、excel文件
4、權限的表結構設計
5、注冊權限app
6、多對多字段設計到哪個表中,就看哪個正向查詢的多,就設計到哪個表中
7、自定義管理類
8、django的一個請求的生命周期
9、把不同功能的視圖函數放到不同的py文件中
10、自定義filter方法必須新建一個python包
11、字體圖標
12、讓django admin的管理后台變成中文