CRM總結大綱

一. CRM客戶關係管理系統

1. CRM是什麼? 裏面都有哪些功能(業務)?

CRM系統是提供給銷售, 班主任, 財務等人員使用的.python

  • 銷售功能:
    • 錄入客戶相關信息, 記錄跟進客戶狀況, 添加報名表, 添加繳費記錄及相關內容的展現.
  • 班主任功能:
    • 建立或編輯班級信息, 建立課程記錄, 批量生成學生學習記錄及相關內容的展現.
  • 財務功能:
    • 財務審批等

2. 什麼是公戶?什麼是私戶?爲何要作這個區分?

在CRM系統中, 將沒有綁定銷售的客戶稱爲公戶, 綁定銷售的客戶稱爲私戶.git

銷售人員各自維護本身的客戶(私戶), 不能夠查看或者跟進其餘人的客戶, 避免產生糾紛.web

3. 請列舉出CRM系統中的表

4. 經過ORM操做對數據庫的數據作展現時, 不一樣字段類型有不一樣的展現方法, 分別是什麼?

  • 普通字段 -- 對象.字段名
  • choice字段 -- 對象.get_字段名_display
  • 外鍵 -- 對象.外鍵字段.屬性
  • 多對多 -- 對象.自定義方法

5. 簡述如何使用modelform

(1)定義一個modelform:數據庫

class CustomerForm(forms.ModelForm):
    """這裏能夠重寫某些字段"""
    class Meta:
        model = models.Customer
        fields = "__all__"
        exclude = 
        wegits =

(2)視圖中:json

form_obj = CustomerForm()
form_obj = CustomerForm(request.POST)
from_obj.is_valid()

(3)模板中:網絡

{% for field in form_obj %}
    {{ field }}
{% endfor %}

6. 請詳細說說公司銷售是如何使用CRM的

銷售能夠經過我的渠道獲取客戶信息, 本身錄入到系統中, 或者銷售主管或網絡諮詢師將已經錄入系統的客戶分配給銷售.session

銷售須要在規定時間間隔內對客戶進行跟進或回訪, 將跟進信息記錄到系統中, 根據不一樣的狀況標記客戶的報名意向.數據結構

當客戶肯定報名時須要讓客戶本人或者銷售幫忙添加報名表.app

當銷售收到客戶繳納的費用時, 須要填寫繳費記錄, 並將費用轉交財務進行審批.

7. 詳細說說班主任是如何使用CRM的

班主任對班級信息進行管理, 對班級信息進行增刪改查.

建立好班級信息後, 能夠對某一班級建立課程記錄, 記錄上課的狀況, 做業要求等信息.

建立好班級信息後, 可根據某節上課記錄來生成學習的上課記錄(學習記錄), 該操做做爲批量操做, 批量生成該課程所對應班級的全部學生的學習記錄. 使用modelformset來展現和編輯這些學習記錄.

8. CRM項目中哪些地方用到了QueryDict對象, 詳細說說它的用法

分頁保留搜索條件時: 搜索條件在request.GET中, request.GET就是QueryDict對象, 將該對象複製後可給該字典中添加頁碼的相關參數, 使用QueryDicturlencode()方法, 將結果拼接到生成的URL上.

添加或編輯後跳轉至原頁面: 本身生成一個QueryDict對象, 將當前訪問的完整路徑添加到該字典中複製給next, 使用QueryDicturlencode()方法, 將結果拼接到生成的添加或編輯的URL上. 添加或編輯後從request.GET中獲取到next的值, 跳轉到該地址便可.

9. CRM中有哪些優勢, 用於作什麼(至少寫5個)

技術點 做用
auth模塊 認證
modelform 對錶進行增刪改查
分頁 對數據進行分頁顯示
Q對象 查詢條件==或==的關係
QueryDict 保留搜索條件
url的命名和反向解析 ----
事務 + 行級鎖 加入私戶
批量建立對象 ----
modelformset ----

二. 權限

1. 使用幾張表來完成權限控制的?每張表中有哪些字段?

字段
菜單表Menu idname
權限表Permission idtitleurlnameparent_idmenu_id
角色表Role idname
用戶表User idusernamepassword
角色和權限關係表 idrole_idpermission_id
用戶和角色關係表 iduser_idrole_id

2. 請簡述實現權限控制的流程

在web應用中, 一個URL表明一個權限, 能夠訪問某一URL則說明有該權限. 該權限系統中URL被分爲兩種, 一種是能夠作二級菜單的父權限, 一種是不能作菜單的子權限. Menu表中的數據稱之爲一級菜單, 二級菜單被分配給一級菜單. 子權限分配給父權限.

當用戶登陸成功時, 根據用戶全部的角色查詢出所具備的權限, 將權限信息和菜單信息存放在session中. 登陸成功後跳轉至其餘URL時, 請求通過中間件時進行權限的校驗, 根據當前訪問的urlsession中存放的權限信息進行正則匹配. 都匹配不成功, 則拒絕訪問. 匹配成功則繼續走正常的流程獲得相應的響應.

頁面中的可點擊的按鈕也是權限, 在模板渲染時使用自定義filter判斷該按鈕所表明的權限是否在該用戶所擁有的權限中, 若是是則顯示該按鈕, 不然不顯示.

3. 初始化權限時, 定義了兩個字典, 分別是什麼數據結構?爲何要把他們存在session中?

permission_dict = {
    '權限的URL別名':{
        'url': 'url路徑',
        'id': '權限的id',
        'pid': '父權限的id',
        'title': '權限的標題',
        'pname': '父權限的URL別名',
    }
}
menu_dict = {
    'title': '客戶管理',
    'icon': 'fa-address-book-o',
    'weight': 10,
    'children': [{
        'title': '客戶列表',
        'url': '/customer/list/',
        'id': 1,
    },]
}

將權限和菜單的字典存放在session中是爲了給不一樣用戶存放不一樣的權限和菜單, 而且session能夠存放在Redis中, 讀取速度快.

4. 權限校驗的中間件都作了什麼事情?

(1)獲取當前訪問的URL, 判斷是否在不須要權限校驗的白名單中, 若是在則再也不進行校驗.

(2)從session中獲取到該用戶的權限信息.

(3)循環出每個權限進行正則匹配, 匹配成功則改變flag標誌位爲True, 而且獲取到須要默認展開菜單的權限id和要展現的路徑導航信息.

(4)循環結束後, flag還未False則拒絕訪問.

5. 如何實現二級菜單默認展開而且是選中狀態的?

二級菜單是經過inclusion_tag實現的, 將request看成參數傳給menu函數, 函數中從request中獲取到menu_dict. 循環menu_dict給一級菜單都添加了一個hideclass, 默認一級菜單下的二級菜單(父權限)是不是要默認選中的二級菜單, 若是是的話, 給該二級菜單添加一個activeclass, 給該二級菜單對應的一級菜單的class從新賦值爲空.

模板中生成二級菜單時添加上對應的class, 則顯示出相應的狀態. classhide則是隱藏狀態, classactive則是選中狀態.

6. 權限控制到按鈕級別是如何實現的?

session中存放着一個有關權限信息的字典, 字典的key爲權限的URL別名, value爲一個權限的具體信息.

自定義了一個filter, 用來判斷某一個權限是否在該用戶的權限字典中, 在的話返回True, 不在返回False.

模板中使用該filter來對每一個要生成按鈕的部分作判斷, 有權限則會顯示按鈕, 沒有權限則不顯示.

7. 權限批量操做時, 哪些權限是須要新增的?哪些是須要刪除的?哪些是可更新的?

  • 新增的: 路由系統中有, 數據庫中沒有的.

  • 刪除: 路由系統中沒有, 數據庫中有的

  • 可更新: 路由系統和數據庫中都有的

8. 開發過程當中遇到問題,通常都是怎樣解決的?請說一下你印象比較深入的一個問題.

9. 請簡述管理權限信息的流程(管理,分配權限是如何操做的)

  • 管理頁面對權限進行增長,刪除,更新等操做
  • 角色管理頁面, 分別對角色設置權限並保存
  • 分別爲用戶設置角色信息並保存

10. 簡述如何將rbac組件應用到一個新項目中.

  • (1)拷貝rbac組件到新的項目中, 註冊app
  • (2)修改用戶表, 繼承rbac中的User
  • (3)執行數據庫遷移指令
    • 1)刪除rbacmigrations中的記錄
    • 2)註釋掉admin中的User
    • 3)roles=models.ManyToManyField(to=Role, verbose_name='用戶擁有的角色', blank=True) 注意: 關聯的字段不要寫成字符串形式
  • (4)設置rbacurl

  • (5)菜單管理
  • (6)權限的錄入
    • 1)全部的url要有name
    • 2)不要忽略rbacnamespace
    • 3)注意url和別名的長度
    • 4)構建層級結構
  • (7)角色管理
  • (8)分配權限
    • 1)注意用新的用戶表替換rbac中的User
    • 2)給不一樣角色分配權限
    • 3)給不一樣用戶分配角色
  • (9)應用權限
    • 1)應用中間件 -- 在settings.py中寫上權限的配置
    • 2)登陸成功後權限信息的初始化
  • (10)動態生成二級菜單
  • (11)應用路徑導航
  • (12)權限控制到按鈕級別

11. rbac組件中有哪些技術點, 用於作什麼?

技術點 做用
中間件 進行訪問權限校驗
inclusion_tag 動態生成二級菜單和路徑導航
filter 權限控制到按鈕級別
modelformset 權限的批量操做
session 保存權限和菜單的數據結構
相關文章
相關標籤/搜索