1.引言

CRM,客户关系管理系统(Customer Relationship Management)。企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的招徕、保留旧客户、提供客户服务及进一步提升企业和客户的关系,并运用市场营销工具,提供创新式的个人化的客户商谈和服务,辅以相应的信息系统或信息技术如数据挖掘和数据库营销来协调所有公司与顾客间在销售、营销以及服务上的交互。

此系统主要是以教育行业为背景,为公司开发的一套客户关系管理系统。为了扩大的系统使用范围,特此将该项目开发改为组件化开发,让同学们可以日后在自己公司快速搭建类似系统及新功能扩展。

  • 权限系统,一个独立的rbac组件。
  • stark组件,一个独立的curd组件。
  • crm业务,以教育行业为背景并整合以上两个组件开发一套系统。

基于组件的软件工程:

基于组件的软件工程(Component-based software engineering,简称CBSE)或基于组件的开发(Component-Based Development,简称CBD)是一种软件开发范型。它是现今软件复用理论实用化的研究热点,在组件对象模型的支持下,通过复用已有的构件,软件开发者可以“即插即用”地快速构造应用软件

优势:

这样不仅可以节省时间和经费,提高工作效率,而且可以产生更加规范、更加可靠的应用软件

模型:

2.项目表设计:

ps:右键,新窗口打开查看大图

3.stark组件使用说明:

 使用stark组件需要完成一下几个步骤:
1. 拷贝stark app到任何系统。
2. 在目标project中注册stark app,如:
INSTALLED_APPS = [
...
'stark.apps.StarkConfig',
]
3. 如果想要使用stark组件,则需要在目标app的根目录中创建 stark.py
4. 配置路由信息
from stark.service.stark import site
urlpatterns = [
...
url(r'^stark/', site.urls),
] 5. 接下来就可以使用stark组件进行快速增删改查,示例:
from crm import models
from stark.service.stark import site, StarkConfig
from django.utils.safestring import mark_safe
from django.conf.urls import url
from django.shortcuts import HttpResponse
from django.urls import reverse
from crm.config.class_list import ClassListConfig class DepartmentConfig(StarkConfig):
list_display = ['id', 'title', StarkConfig.display_edit, StarkConfig.display_del] site.register(models.Department, DepartmentConfig) class UserInfoConfig(StarkConfig): def display_gender(self, row=None, header=False):
if header:
return '性别'
return row.get_gender_display() def display_detail(self,row=None, header=False):
if header:
return '查看详细'
return mark_safe('<a href="%s">%s</a>' %(reverse('stark:crm_userinfo_detail',kwargs={'pk':row.id}),row.name,)) list_display = [
display_detail,
display_gender,
'phone',
'email',
'depart',
StarkConfig.display_edit,
StarkConfig.display_del
] def extra_url(self):
info = self.model_class._meta.app_label, self.model_class._meta.model_name urlpatterns = [
url(r'^(?P<pk>\d+)/detail/$', self.wrapper(self.detail_view), name='%s_%s_detail' % info),
]
return urlpatterns def detail_view(self,request,pk):
"""
查看详细页面
:param request:
:param pk:
:return:
"""
return HttpResponse('详细页面...') search_list = ['name','depart__title'] site.register(models.UserInfo, UserInfoConfig)

4.rbac权限组件使用说明:

 使用rbac组件时,应用遵循以下规则:

 1. 清除rbac/migrations目录下所有数据库迁移记录(保留__init__.py)

 2. 在项目路由系统中注册rabc相关的路由信息,如:
urlpatterns = [
...
url(r'^rbac/', include('rbac.urls',namespace='rbac')),
] 3. 注册app 4. 让业务的用户表继承权限的UserInfo表
如:
rbac:
class UserInfo(models.Model):
"""
用户表
"""
username = models.CharField(verbose_name='用户名', max_length=32)
password = models.CharField(verbose_name='密码', max_length=64)
email = models.CharField(verbose_name='邮箱', max_length=32)
roles = models.ManyToManyField(verbose_name='拥有的所有角色', to=Role, blank=True) class Meta:
abstract = True
crm:
from rbac.models import UserInfo as RbacUserInfo
class UserInfo(RbacUserInfo):
"""
员工表
"""
name = models.CharField(verbose_name='真实姓名', max_length=16)
phone = models.CharField(verbose_name='手机号', max_length=32) gender_choices = (
(1,'男'),
(2,'女'),
)
gender = models.IntegerField(verbose_name='性别',choices=gender_choices,default=1) depart = models.ForeignKey(verbose_name='部门', to="Department") def __str__(self):
return self.name 5. 数据库迁移 6. rbac提供URL
urlpatterns = [
url(r'^menu/list/$', permission.menu_list, name='menu_list'), # rbac:menu_list
url(r'^menu/add/$', permission.menu_add, name='menu_add'),
url(r'^menu/edit/(?P<pk>\d+)/$', permission.menu_edit, name='menu_edit'),
url(r'^menu/del/(?P<pk>\d+)/$', permission.menu_del, name='menu_del'),
url(r'^permission/add/$', permission.permission_add, name='permission_add'),
url(r'^permission/edit/(?P<pk>\d+)/$', permission.permission_edit, name='permission_edit'),
url(r'^permission/del/(?P<pk>\d+)/$', permission.permission_del, name='permission_del'), url(r'^multi/permissions/$', permission.multi_permissions, name='multi_permissions'), url(r'^distribute/permissions/$', permission.distribute_permissions, name='distribute_permissions'),
url(r'^role/list/$', permission.role_list, name='role_list'),
url(r'^role/edit/(?P<pk>\d+)/$', permission.role_edit, name='role_edit'),
url(r'^role/del/(?P<pk>\d+)/$', permission.role_del, name='role_del'),
]

5.项目源码:

我的GitHub :https://github.com/hyyc554/crm

django——CRM项目的更多相关文章

  1. Django - CRM项目(2)Q查询(模糊查询)

    一.CRM项目(2) 利用Q查询中的q对象完成条件筛选功能. 批量删除.公户转私户功能. 新增一张跟进记录表ConsultRecord,迁移数据库并添加测试数据,实现跟进记录列表页面. 客户列表新增跟 ...

  2. Django - CRM项目(3)

    一.CRM项目的业务逻辑与表结构梳理 1.分析业务逻辑 (1) 引流(sem) (2) 网络咨询师(客服):添加客户信息和查看客户,分配销售 (3) 销售:查看私户 添加跟进记录 失败:加入公户 成功 ...

  3. Django CRM学员系统项目

    项目需求: 1.分讲师\学员\课程顾问角色,2.学员可以属于多个班级,学员成绩按课程分别统计3.每个班级至少包含一个或多个讲师4.一个学员要有状态转化的过程 ,比如未报名前,报名后,毕业老学员5.客户 ...

  4. CRM项目讲解和django知识点回顾

    今天想把之前写的CRM项目梳理下,顺便回顾一下djiango的部分重要知识. 1.登录页面(包含简单验证码) 首先来看下CRM的登录页面,样式啥的不重要,大家可以去jquery ui的网站上或者其他地 ...

  5. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  6. CRM项目总结

                CRM项目总结      一:开发背景 在公司日益扩大的过程中,不可避免的会伴随着更多问题出现. 对外 : 如何更好的管理客户与公司的关系?如何更及时的了解客户日益发展的需求变 ...

  7. CRM项目之RBAC权限组件-day26

    写在前面 上课第26天,打卡: 世间安得双全法 不负如来不负卿 s17day26 CRM项目 项目概要:XX公司CRM - 权限管理,公共组件,app ***** - 熟悉增删改查,Low *** - ...

  8. crm项目整理

    crm项目整理   一.开发背景 由于公司人员的增多,原来通过excel表格存取方式过于繁琐,而且对于公司人员的调配和绩效考核等不能做到精确处理,所以开发crm系统,开始开发只是针对销售人员和客户,后 ...

  9. Linux下运行crm项目

    虚拟环境运行crm项目 1.进入虚拟环境 2.解决crm项目运行所需的依赖环境 1.手动解决 pip3 install django==1.11.14 pip3 install pymysql pip ...

随机推荐

  1. Python实现聚类算法AP

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

  2. SQL修改日期类型字段为字符串类型

    select * from test1 --添加行 ) --将转换格式后的数据放到列中 ) --删除老的字段 alter table test1 drop column startdate --修改字 ...

  3. js实现可输入的下拉框

    <HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=gb2312'> ...

  4. python 实现简单卷积网络框架

    第一步定义卷积核类: class Filter(object): # 滤波器类 对卷积核进行初始化 def __init__(self,width,height,depth): # initializ ...

  5. Flink学习(二)Flink中的时间

    摘自Apache Flink官网 最早的streaming 架构是storm的lambda架构 分为三个layer batch layer serving layer speed layer 一.在s ...

  6. Mysql的跨服务器 关联查询--Federated引擎

    1.确认开启Federated引擎     查询FEDERATED功能是否开启: show ENGINES;       2.如果状态为NO则需修改my.ini文件,增加一行federated配置: ...

  7. Hello jna

    记录下这几天用jna3.5.0调c++写的dll的经历 os:win7 用jna调dll首先需要一个dll文件并有可调的方法,然后根据方法的名称,参数,返回值编写一个interface c++需要包含 ...

  8. C#多态及接口

    直接看代码吧 using System; using static System.Console; namespace ConsoleApp { //使用abstract,抽象类或方法,不能使用vir ...

  9. Easyui Tab使用

    常见问题: 1. easyui 在子tab页中打开新tab页(关于easyUI在子页面增加显示tabs的一个问题) https://blog.csdn.net/u014805893/article/d ...

  10. 【原创】Linux基础之用户和组

    1 添加.删除用户 # useradd $user# userdel $user 2 设置用户密码 # passwd $user /etc/passwd 3 查看$user的用户和组信息 # id $ ...