django——CRM项目
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项目的更多相关文章
- Django - CRM项目(2)Q查询(模糊查询)
一.CRM项目(2) 利用Q查询中的q对象完成条件筛选功能. 批量删除.公户转私户功能. 新增一张跟进记录表ConsultRecord,迁移数据库并添加测试数据,实现跟进记录列表页面. 客户列表新增跟 ...
- Django - CRM项目(3)
一.CRM项目的业务逻辑与表结构梳理 1.分析业务逻辑 (1) 引流(sem) (2) 网络咨询师(客服):添加客户信息和查看客户,分配销售 (3) 销售:查看私户 添加跟进记录 失败:加入公户 成功 ...
- Django CRM学员系统项目
项目需求: 1.分讲师\学员\课程顾问角色,2.学员可以属于多个班级,学员成绩按课程分别统计3.每个班级至少包含一个或多个讲师4.一个学员要有状态转化的过程 ,比如未报名前,报名后,毕业老学员5.客户 ...
- CRM项目讲解和django知识点回顾
今天想把之前写的CRM项目梳理下,顺便回顾一下djiango的部分重要知识. 1.登录页面(包含简单验证码) 首先来看下CRM的登录页面,样式啥的不重要,大家可以去jquery ui的网站上或者其他地 ...
- Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页
{#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...
- CRM项目总结
CRM项目总结 一:开发背景 在公司日益扩大的过程中,不可避免的会伴随着更多问题出现. 对外 : 如何更好的管理客户与公司的关系?如何更及时的了解客户日益发展的需求变 ...
- CRM项目之RBAC权限组件-day26
写在前面 上课第26天,打卡: 世间安得双全法 不负如来不负卿 s17day26 CRM项目 项目概要:XX公司CRM - 权限管理,公共组件,app ***** - 熟悉增删改查,Low *** - ...
- crm项目整理
crm项目整理 一.开发背景 由于公司人员的增多,原来通过excel表格存取方式过于繁琐,而且对于公司人员的调配和绩效考核等不能做到精确处理,所以开发crm系统,开始开发只是针对销售人员和客户,后 ...
- Linux下运行crm项目
虚拟环境运行crm项目 1.进入虚拟环境 2.解决crm项目运行所需的依赖环境 1.手动解决 pip3 install django==1.11.14 pip3 install pymysql pip ...
随机推荐
- js的7种类型
众所周知,js有7种数据类型 1. null 2. undefined 3. boolean 4. number 5. string 6. 引用类型(object.array.function) 7 ...
- Ubuntu16下Hadoop安装
1. 安装Ubuntu 2. 新装Ubuntu常用软件安装和系统设置 (1) 安装vim yum install vim (2) 更改hostname为hadoop_master sudo vim / ...
- mui扩展字体在哪里下载
一次在一个知名前端模板网站上用积分下载了一个手机网页模板,没想到作者竟然玩起了删减隐藏,故意挖坑. 查看其原因是少一个mui.ttf的文件,纵然其他的文件及名称都有删改但无关紧要.也就是好多人搜索的m ...
- 第四节:MVC中AOP思想的体现(四种过滤器)并结合项目案例说明过滤器的实际用法
一. 简介 MVC中的过滤器可以说是MVC框架中的一种灵魂所在,它是MVC框架中AOP思想的具体体现,所以它以面向切面的形式无侵入式的作用于代码的业务逻辑,与业务逻辑代码分离,一经推出,广受开发者的喜 ...
- [物理学与PDEs]第1章习题7 载流线圈的磁场
设一半径为 $R$ 的圆周电路上的电流强度为 $I$. 试计算在通过圆心垂直于圆周所在平面的直线上, 由该圆周电路产生的磁场的磁感强度. 解答: 由对称性知在该直线 $l$ 上, ${\bf B}$ ...
- web全栈应用【爬取(scrapy)数据 -> 通过restful接口存入数据库 -> websocket推送展示到前台】
作为 https://github.com/fanqingsong/web_full_stack_application 子项目的一功能的核心部分,使用scrapy抓取数据,解析完的数据,使用 pyt ...
- WPS for Linux 2017版+字库安装
一.下载地址: http://wps-community.org/download.html WPS Office for Linux Alpha21[2017-06-15] http://wps-c ...
- 《尚学堂_史上最易懂的设计模式视频》--章节3 Iterator迭代 模拟列表
广州尚学堂官网-|广州Java培训|Java培训机构|人工智能+Python培训|PHP培训|全栈工程师培训|UI设计培训|前端移动开发培训http://www.gzsxt.cn/ ==Iterato ...
- 20165230 Exp3 免杀原理与实践
目录 1.实验内容 2.基础问题回答 3.实验内容 任务一:正确使用免杀工具或技巧 使用msf编码器,msfvenom生成如jar之类的其他文件 使用veil-evasion 自己利用shellcod ...
- WGAN讲解
参考:https://blog.csdn.net/omnispace/article/details/54942668 上面这篇博客讲的很好!