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/

相关文章
相关标签/搜索