Django之路 - 項目實戰之<教育行業CRM開發>


本節內容python

業務痛點分析數據庫

項目需求討論django

使用場景分析服務器

表結構設計網絡

業務痛點分析

 我2013年剛加入老男孩教育的時候,學校就一間教室,2個招生老師,招了學生後,招生老師就在本身的excel表裏記錄一下,每個月算工資時,就按這個表來統計招生提成, 後來學校大了點,教室變成了3間,招生老師變成了4我的,招的學生也開始多了起來,不過你們依然是招了學生就紀錄在本身的excel裏,但問題開始出現了,咱們的招生可能是經過網絡qq聊天在線諮詢,好多客戶須要聊好久才能轉化成學員,常常會出現一個客戶跟一個招生老師聊事後,過了一段時間卻在另外一個招生老師那報名了。 因而爭執就出現了,A銷售說這我的是先找我諮詢的,我幫他回答了大多數問題,報名提成卻算成B的,不公平。B銷售也會講,這個客戶找他諮詢時並未說本身以前跟其它銷售聊過呀,因此對B來說,這就是個新客戶呀,而且是在B這報的名, 憑什麼要分提成給A呀。爲了解決這個問題,因而想出一個辦法,搞了一個機器作共享服務器,共享服務器上搞了個統一的客戶信息excel表,你們每人聊過的客戶都在這個表裏紀錄, 這樣每一個人錄入前,先在表格裏全局查一下,這個客戶的qq號是否是已經在表裏了,這樣就能避免衝突了。 但用過共享文件的應該都遇到過一個問題就是,爲保證數據一致性,同一時間系統只容許一個用戶修改數據, 但咱們的每一個招生老師一上班,就會打開這個共享文件,隨時聊的學生,隨時會錄入到表裏。但這個限制使的你們,只要一有人錄入信息,就得要求其它銷售人員都把文件先關閉,錄入信息後其它人才能再用,這搞的你們很難受。  因此銷售人員常常讓我幫開發個系統,能夠解決一些相似這樣的問題。
app

 另外, 咱們在講課時, 爲了保證和檢驗學員的學習效果, 每節課講完時都會給學生部置一個做業,要求他必須在下節上課前完成並提交做業,老師會給學員統一批做業,做業成績也紀錄在excel表中,就像下圖同樣。每一個老師維護本身班級的做業,校長若是想看各個班級的成績,還要跟每一個老師要學員成績表,很不方便, 當時校長就跟我講,學員的成績\出勤狀況等要是也能統一管理就行了。ide

wKioL1jaVauRoQPrAADeBdeS2r4274.png-wh_50

因而我內心也一直紀着這個事,想幫學校開發一個學員開發一個相似CRM(客戶關係管理軟件)的系統,集銷售管理\學員管理等功能於一體。但日常要上班,周未還要講課,一直沒時間,終於有一次,我要去美帝度假,飛機要飛13個小時纔到紐約,在飛機上忽然想,反正也是沒事幹, 不如就開發這個東西吧, 因而一路未眠,狂寫了近千行代碼,飛機的上的美女空乘都心疼的多給我倒了2杯咖啡,哈哈,下飛機時,已經是兩眼痛紅,不過,這個學員管理系統的雛形也作出來了,接下來幾天在紐約又完善了下細節,因而就開始上線讓你們用了。到如今,這個系統在公司已經用了一年多了,你們天天都在使用,以前的痛點都解決了,特別是銷售人員, 工做已經離不開這個系統了,本身作的東西幫別人解決具體問題,內心仍是蠻開森的!
學習


我的以爲這個學員管理系統的挺適合新手練習的,難度適中,用戶的知識點也比較綜合,因此把學校裏的系統簡化了一下,提練成了一個教學項目,下面咱們就一塊兒來作一個嘍。
spa


噢,對了,最後說一下這個項目涉及到的知識點,請確保你以充分掌握了下面所列知識點再學習此項目噢!設計

Django

JQuery

BootStrap

Ajax

HTMS\\CSS

項目需求討論

首先給咱們的項目起個名字吧,這個系統要同時支持銷售管理\學員管理\講師管理等功能,功能比較雜,不能稱之爲嚴格意上的CRM,由於CRM通常只包括銷售管理,but anyway, who cares,咱們就叫它」老男孩crm管理系統」吧,

 起好了名字,開始動手寫以前, 確定要把需求想清楚,需求想不清楚就開始寫的話,等於給本身挖坑,你確定不想出現寫了5千行代碼後,忽然發現,需求搞錯了,還要從新推到重來的事情吧。因此,如今靜下心,把需求想明白,畫好思惟導圖,跟同事多討論應用場景,作了各方面論證後,再開始動工噢。

 咱們的系統的用戶分3種,銷售\學生\講師,這3個角色關注的事情是不一樣的, 銷售只關注招了多少學員,講師關注本身管理的班級學習成績怎樣,學員只關注本身的學習成績。 所以在想需求時,你要從每一個角色出發,看他關心的是什麼, 因而我畫出了這個思惟導圖


 wKiom1jaVduj0QjPAAEqUZjwLpE984.png-wh_50


根據思惟導圖,咱們總結出如下具體需求:

把用戶分爲銷售\學員\講師3種角色,每一個角色關心的事情不一樣,因此有要不一樣的用戶視圖,即銷售人員登錄後只須要看他與他工做相關的就能夠,講師關心的事情不須要在銷售視圖裏顯示

銷售人員能夠錄入客戶信息,和後續跟進信息,由於一個客戶可能要跟進好幾回纔會報名。 能夠多種條件過濾查詢用戶,能夠查看本身的銷售業績報表

學員主要2個功能,查詢成績\提交做業

講師的主要功能是管理班級\\ 批做業\上課點名

雖然如今只有一個校區,但要考慮到之後的擴展,之後全國可能有好多個校區,不一樣校區之間的數據應該是隔離的

這個系統裏存放着大量的客戶信息\學員數據等,都是公司的機密信息,設計系統時就要考慮到權限問題,不一樣的角色要有不一樣的權限,同一角色的不一樣用戶也要容許有不一樣的權限

使用場景分析

爲了更加理清咱們的項目開發需求,在動手寫代碼前,建議再有一個業務場景分析的步驟,即從用戶角度寫出你使用這個項目的具體場景,咱們這裏分爲銷售、講師、學員3個角色,我分別給每一個角色列出了幾個使用場景:

一. 銷售:

銷售人員張三剛經過qq羣聊了一個客戶,諮詢了"Python全棧開發課程",錄入了CRM

張三 回訪了一個 一個月多前諮詢的老客戶,老客戶說最近考慮報名,讓張三 下週聯繫他辦報名手續, 張三把這個回訪信息 錄入了crm

李四 今天錄入了8個新客戶,但發現有一個客戶在錄入時,系統提示,此客戶信息已存在,因而就在客戶庫查了一下,發現 此客戶 已被  張 三  在上週錄入了,銷售部有規定,在客戶被錄入一個月內,其它銷售是不能搶這個單的,因而就提醒張三,讓他跟這個客戶主動再跟進一下

李四今天 有一個客戶要報名,李四給客戶發了在線報名 連接,要求其填寫一些我的信息,上傳證件照片等,交了500報名費後,將其正式添加到了報名的 班級裏

銷售主管 BigSB  查看了今天的銷售報表, 查看了每一個銷售的最近一週 諮詢的客戶量,成單比, 每一個課程 分別 報名了多少學員, 這些客戶 都是從哪些渠道 過來的

二. 講師:

講師Alex 今天 要給 Python自動化 周未班上課, 上課前要進行點名, 因而建立了一條生課紀錄 ,這條上課記錄關聯 着每一個學員 這節課的 出勤狀態,alex 邊點名邊在系統 中紀錄每一個學員的狀態 ,簽到、遲到或缺勤。

今天的課上完後,ALEX給你們留了做業,在系統 裏 找到今天 的上課記錄,把做業 需求 寫到了 上課紀錄 裏

過了一週, Alex 登陸 系統 下載了全部學員這節課的做業 , 爲每一個學員批改了做業 並將學員的成績紀錄在了系統 裏

三. 學員:

學員小明 報名了「Go語言開發課程第2期周未班」, 交完報名費後,招生老師 給他發了一個報名地址 要求其填寫,填寫了我的信息 並上傳了證件信息, 提交後, 過了一會,就發現本身的qq郵箱裏收到了一封 老男孩學校的郵件, 告知他 已爲其 生成了 學員帳號,他按照郵件 提示 登陸 了 老男孩的學員系統 ,看到系統 中能夠  進入本身的班級,不過如今班級裏 尚未上課紀錄, 他還能在線查看 他的學員合同

過了一週, 正式上課了,上了一天課,講師Alex佈置了做業 , 小明過了幾天 完成 做業後,登陸 學員管理系統 , 發現有一條 本身的上課記錄, 他點進去,看到了當節課的 做業 需求,及提交做業的方式 ,他只須要把做業 打包成.zip格式 ,直接拖拽到頁面上的交做業區就能夠了。

過了兩天, 小明收到郵件提醒 ,說本身做業 得了個A,很是 的開森。

小明學了幾個月好,發現老男孩講師講的好,本身學的也不錯,因而極力推薦本身的2個朋友也來學習, 因而在本身的學員系統 裏錄入了2條推薦朋友學習的信息, 沒過一會, 小明以前的招生老師就聯繫他說,已經收到他的推薦名單,很快就會聯繫 小明的朋友 。 

 好啦, 業務場景也分析完了,接下來咱們終於能夠開始搞事情啦!

 

表結構設計

在設計表結構前,我們先建立好一個項目吧,項目名就叫PerfectCRM,app名叫crm

wKiom1jaVh7C8d_9AAEeZ3QebwM015.png-wh_50


 我這裏先列出來咱們大致須要的表,爾等先過目一下,而後咱們再分別爲何須要每一個具體的表,及這個表裏要存什麼樣的數據

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

from django.db import models

 

# Create your models here.

 

 

class Customer(models.Model):

    '''存儲全部客戶信息'''

    pass

 

class Enrollment(models.Model):

    '''存儲已報名學員的信息'''

    pass

 

class CustomerFollowUp(models.Model):

    '''存儲客戶的後續跟進信息'''

    pass

 

class ClassList(models.Model):

    '''存儲班級信息'''

    pass

 

class Course(models.Model):

    '''存儲所開設課程的信息'''

    pass

 

class CourseRecord(models.Model):

    '''存儲各班級的上課記錄'''

    pass

 

class StudyRecord(models.Model):

    '''存儲全部學員的詳細的學習成績狀況'''

    pass

 

class UserProfile(models.Model):

    '''存儲全部講師\銷售人員\\ 學員 用戶信息'''

    pass

 

 

class Role(models.Model):

    '''角色信息'''

    pass

 

class Branch(models.Model):

    '''存儲全部校區'''

    pass

 

接下來分別解釋每張表

1. Customer表, 主要給銷售人員用, 存儲全部客戶信息,裏面要記錄客戶來源\姓名\qq \客戶來源\諮詢的內容等 

 Customer

2. 學員報名表,這裏爲何要把客戶信息表 和 這個學員報名表分開呢? 因內一個學員能夠報多個課程 ,每一個課程 都須要單獨記錄學習成績呀什麼的,因此每報一個課程 ,就在這裏生成 一條相應的報名記錄

 Enrollment

3. 客戶跟進表,這張表的意義很容易理解, 一個客戶今天諮詢後,你錄入到了客戶信息表,但他沒報名, 因此過了一段時間,銷售還得再跟他聊聊吧,聊完後,結果又沒報,那也得紀錄下來吧,由於每一個銷售天天要聊不少人,你不紀錄的話, 可能下次再跟這我的聊時,你早已忘記上次聊了什麼了, 這樣會讓客戶以爲這個銷售不專業,相反,若是把每次跟進的內容都紀錄下來, 過了幾個月,這個客戶再跟你聊時,居然發現,你還記得他的全部狀況,他就以爲你很重視他,說不定一感動就報名了,哈哈。 因此,一條客戶信息可能會對應多條跟進記錄,是個1對多的關係,必須單獨搞張表來記錄

 CustomerFollowUp

4. 班級表, 學生以班級爲單位管理,這個表被學員表反向關聯, 即每一個學員報名時須要選擇班級

 ClassList

5. 課程表,存儲課程介紹\大綱等基本信息

 Course

6. 上課紀錄表,每一個班級都要上不少次課,講師每上一次課的紀錄都要紀錄下來,之後能夠方便統計講師工資什麼的

 CourseRecord

7. 學員學習紀錄表,思考一下,若是你想實現紀錄每位學員的詳細學習紀錄,即精確到每節課的成績\出勤狀況,怎麼辦?其實很簡單, 先來看一下此時班級\上課紀錄\學員學習紀錄的關係圖:

wKiom1jaVk6Re1vTAAB5QNITODk977.png-wh_50



 StudyRecord

能夠看出,一個班級對應多節課,每節課又對應多個學生的出勤和成績,咱們已經經過班級表(」ClassList」)和上課紀錄表(」CourseRecord」)存儲了班級信息和每節上課紀錄,想存學生的每節課學習紀錄的話只須要再搞一個表就能夠了。

 

8. 用戶表,存儲銷售、講師帳戶信息

這裏咱們用django自帶的認證系統,並對其進行自定製

 UserProfile

9. 角色表,用於角色劃分,用於權限管理,權限功能咱們後面會實現,這裏只在表裏先存個簡單的角色名

 Role 

10. 校區表,存儲不一樣校區

 Branch

11. 菜單表,不一樣的角色看到的菜單不一樣, 咱們支持動態菜單 ,因此須要把菜單 以及 和角色的關聯存下來

 FirstLayerMenu

12. 二級菜單表, 還能夠支持2級子菜單

 SubMenu

13. 繳費記錄

 PaymentRecord

好啦,表基本都建完了,接下來同步數據庫,不過在同步數據庫前,要改一下settings.py, 由於咱們自定義了django的認證表,因此須要明確的告訴django,用咱們改過的過來作默認的認證系統。

在settings.py中添加如下行,格式爲 app.modelname 


1

AUTH_USER_MODEL = 'crm.UserProfile'

  

最後一步,同步數據庫! 

1

2

python3 manage.py makemigrations

python3 manage.py migrate

  

本文轉載於老男孩IT教育官網。

首發網址:http://www.oldboyedu.com/

相關文章
相關標籤/搜索