注意本项目是针对培训学校开发简化的CRM

CRM简介

CRM全称:customer relationship management

无CRM的痛点

没有CMR的缺点及痛点:

  1. 每个销售会通过Excel来统计客户信息,造成信息不能同步和共享
  2. 客户信息没有记录和跟进信息
  3. 会造成抢单问题
  4. 无法统计成单率和报表
  5. 没有和客户的沟通记录
  6. 客户信息表,唯一的客户端ID
  7. 一对多的跟进记录
  8. 客户状态,报名和未报名
  9. 客户来源分析
  10. 学员报名信息
  11. 学员可以报多个课程,每个课程的每节课程都有成绩,以及成绩排名
  12. 班级信息

将痛点转换成需求

班级—>课程节次—>学员上课记录

  1. 课程信息
  2. 缴费记录
  3. 用户使用场景分析
  4. 角色管理
  5. 权限管理
  6. 动态菜单
  7. 在线交作业

关于表结构

后续完整后补充

关于django的admin

知识点回顾:

使用django中的admin的方法:

1、models.py中创建好表的类

2、执行python3 manager.py makemigrations

3、执行python3 manager.py migrate

4、上述操作完成后默认是在项目文件下生成db.sqlite3数据库文件

5、 在admin.py文件中先导入modes,然后将表进行注册,该项目的代码例子如下:

from django.contrib import admin
# Register your models here.
from crm import models
admin.site.register(models.Customer)
admin.site.register(models.StudyRecord)
admin.site.register(models.Role)
admin.site.register(models.Menu)
admin.site.register(models.Enrollment)
admin.site.register(models.ClassList)
admin.site.register(models.Branch)
admin.site.register(models.CourseRecord)
admin.site.register(models.Course)
admin.site.register(models.FollowUpRecord)
admin.site.register(models.UserProfile)

6、 最后执行python3 manage.py createsuperuser,创建admin用户

如何调用django中admin的认证功能

如果想要调用django中的admin认证需要:

在models.py文件中创建表的类的时候,先导入一个模块

from django.contrib.auth.models import User

然后在用户信息的类中,通过和admin中user表建立一对一的关系,从而实现认证功能

class UserProfile(models.Model):
'''
用户信息
'''
user = models.OneToOneField(User)
name = models.CharField(max_length=32)

这样就可以调用django中admin的认证

在views.py函数中使用admin的认证

调用django中admin的认证功能需要导入如下模块,authenticate用于认证,login用于登录,logout用于退出

from django.contrib.auth import authenticate,login,logout

具体代码如下:

def acc_login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
user = authenticate(username=username,password=password)
#因为这里调用的django中admin的认证功能,所以这个时候如果认证成功得到的是<class 'django.contrib.auth.models.User'>对象
#如果想要获取具体的用户名,可以user.userprofile.name得到
#print("res:",type(user),user.userprofile.name)
if user:
#auth认证成功
login(request,user)
return redirect("/crm")
return render(request,"login.html")

这里需要知道的是authenticate返回的其实是一个用户对象

<class 'django.contrib.auth.models.User'>,

如果想要获取具体的用户名字则需要通过user.userprofile.name,

关于动态菜单

根据属于不同的用户角色的用户登录是显示不同的菜单

(这里有一个问题需要注意,当一个菜单选项属于多个角色的时候,而这个用户又属于多个角色,这个时候就会造成该用户登录的时候菜单选项重复问题)

动态菜单这里还有一个事情需要小技巧,就是选中某菜单的时候给一个背景色,即动态添加active

这里可以根据url来设置,因为每个菜单的都是一个a标签而a标签的href属性和当前的页面的url是相同的

通过通过在js中获取当前的url也就是’{{request.path}}’

关于django中admin的自定制功能

在django的admin中可以自定义显示的字段内容,需要在admin.py配置文件中做如下配置:

class CustomerAdmin(admin.ModelAdmin):
  list_display = ("id","name","qq","consultant","consult_content","status","date")

在admin.py中创建类,并且让继承admin.ModelAdmin

list_display表示要显示的字段,将要显示的字段在后面列出,这样在前端页面就可以看到

当然也可以通过list_filter实现过滤的搜索的功能

通过search_fields实现关键字搜索

通过list_editable实现对某些字段编辑功能如:

自己写一个admin,这里命名为kingadmin

分析过程:

首先从外观分析

django登录admin的时候显示如上图,会显示所有的app名字,并且在每个app下会显示该app所有的表名

这里有几个知识点需要注意:

关于如何获取所有的app

所有注册的app都会在sttings的配置文件中的INSTALLED_APPS中,

而这里获得方法如下:

from django import conf

for app in conf.settings.INSTALLED_APPS:
try:
print(__import__("%s.kingadmin" %app))
except ImportError as e:
print("app has no model kingadmin")

这里通过导入django的conf模块,然后conf.settings.INSTALLED_APPS获取所有的app信息,

关于注册表

分析django的admin的源码可以看出关于注册这里,是创建了一个AdminSite类,并且实例化

在初始化函数的时候顶一个registery字典

每次注册都会添加到这个字典中,所以我们可以模仿这个样子写

在这里用到几个知识点:

自定义标签simple_tag

创建过程:

创建templatetags包

在templatetags创建py文件

导入template模块:from django import template

register = template.Library()

@register.simple_tag

如果返回的内容中有html则需要

from django.utils.safestring import mark_safe

在要返回的字符串:mark_safe(内容)

最要在前段页面导入:{%load kingadmin_tags%}这里kingadmin_tags 是在templatetags包创建的py文件

待续。。。。。。。。

关于python开发CRM系统的更多相关文章

  1. python开发--信息处理系统

    #!/usr/bin/python card_list=[] #定义列表变量 def show_menu(): print("*" * 10) print("名片管理系统 ...

  2. 如何在CRM系统中集成ActiveReports最终报表设计器

    有时候,将ActiveReports设计器集成到业务系统中,为用户提供一些自定义的数据表,用户不需要了解如何底层的逻辑关系和后台代码,只需要选择几张关联的数据表,我们会根据用户的选择生成可供用户直接使 ...

  3. Ubuntu系统下搭建Python开发环境

    之前演示了在Windows中安装Pycharm,很简单.下面介绍一下如何在Ubuntu中安装Pycharm 1.更新Python至3.5.1,执行以下命令: sudo add-apt-reposito ...

  4. Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程

    1. CRM系统介绍 CRM系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系. 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制.客户关 ...

  5. 零售CRM系统开发的核心功能

    在零售行业中,客户关系管理系统是一个包含销售,市场营销和客户服务流程的中央枢纽.它为企业所有者提供了一种可以结合所有与销售有关的问题并管理销售流程的有效工具.零售CRM可以留住客户,提供个性化的一流客 ...

  6. CRM系统(第一部分)

      阅读目录 1.需求分析 2.数据库表设计 3.起步 4.录入数据 5.知识点 1.需求分析 CRM客户关系管理软件---> 学员管理 用户:企业内部用户 用户量: 业务场景: 2.数据库表设 ...

  7. Django CRM系统

    本节内容 业务痛点分析 项目需求讨论 使用场景分析 表结构设计 业务痛点分析 我2013年刚加入老男孩教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每 ...

  8. Python开发 第01课 Python 简介

    一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  9. crm 系统项目(二) admin 后台操作表格

    crm 系统项目(二) admin 后台操作表格 1. app下创建 templates  运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...

随机推荐

  1. petapoco 对存储过程的扩展 干货

    好久没发表文章了.心血来潮,简单的介绍下这次工作中的问题. 项目中运用了Petapoco,可是petapoco对存储过程的支持不够好.或者说对于某些特殊场景,petapoco的sql支持度有限. 比如 ...

  2. [软工课程博客] 求解第N个素数

    任务 求解第 10,0000.100,0000.1000,0000 ... 个素数(要求精确解). 想法 Sieve of Eratosthenes 学习初等数论的时候曾经学过埃拉托斯特尼筛法(Sie ...

  3. webSocket开发chat application过程

    本次使用websocket开发chat的功能已经接近尾声,等到压力测试结束之后就可以上线了.在此记录一下整个开发过程. ---------------------------------------- ...

  4. 一日游 + 进度psp

    假设我们全班同学及教师去吉林省吉林市1日游,请为这次活动给出规格说明书. 目录 1   引言 1.1   编写目的 1.2   项目背景 1.3   参考资料 2   需求分析 2.1   交通方式 ...

  5. phpStudy-坑爹的数据库管理器-phpMyAdmin的默认用户名和密码

    在这里我必须承认自己的弱智,第一次使用phpMyAdmin竟然搞了10分钟才进去!!! 要使用默认的用户名和密码: 用户名:root 密码:root 尼玛!坑爹啊!不说清楚让我百度了半天!!!!

  6. javascript面向对象系列第五篇——拖拽的实现

    前面的话 在之前的博客中,拖拽的实现使用了面向过程的写法.本文将以面向对象的写法来实现拖拽 写法 <style> .test{height: 50px;width: 50px;backgr ...

  7. bzoj4514 [Sdoi2016]数字配对(网络流)

    Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...

  8. BZOJ5467 PKUWC2018Slay the Spire(动态规划)

    即求所有情况的最大伤害之和.容易发现应该先打强化牌,至少打一张攻击牌.同样显然的是强化牌和攻击牌都应该按从大到小的顺序打.进一步可以发现,只要还有强化牌,就应该使用(当然至少留一次攻击的机会). 于是 ...

  9. MySQL 5.7基于组提交的并行复制

    参考链接: http://mysql.taobao.org/monthly/2016/08/01/ https://www.kancloud.cn/thinkphp/mysql-parallel-ap ...

  10. 【题解】 [SCOI2011]糖果 (差分约束)

    懒得复制,戳我戳我 Solution: 首先考虑\(X=1\)的情况,我们其实只用用一下并查集把相等的点合为一个点 然后后面的四个式子我们就可以用差分约束了,就拿\(X=2\)的情况来说吧,我们用\( ...