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 ...
随机推荐
- 二.django项目环境搭建
Ⅰ.web框架介绍 1.socket 服务端 1)客户端(手机中各种app.浏览器)是用来与服务端(网站的服务器程序)进行交互的 2)服务端类似发电厂,客户端类似电器,socket类似插座,互联网的数 ...
- qt: 系统默认程序打开文件或者软件;
Qt提供了QDesktopServices类, 可以利用openUrl函数调用默认程序打开文件: 源码参考: #ifdef Q_OS_WIN32 m_szHelpDoc = QString(" ...
- Python读写文件的几种方式
一.pandas pandas模块是数据分析的大杀器,它使得对于文件相关的操作变得简单. 看一下它的简单使用 import pandas as pd # 读取 df = pd.read_csv('al ...
- module 'pip' has no attribute 'main'
摘录自:http://www.cnblogs.com/Fordestiny/p/8901100.html 问题分析: 问题解决: 找到安装目录下 helpers/packaging_tool.py文件 ...
- free命令查看内存信息
free介绍 FREE(1) Linux User’s Manual FREE(1) NAME free - Display amount of free and used memory in the ...
- 命令框下上传到gitee
git常用命令 C:\Users\Administrator>cd www/p2p设置账号C:\Users\Administrator\www\p2p>git config --globa ...
- PnP 问题方程怎么列?
PnP 问题即 Perspective-n-Point . 有 P3P 方法,使用三个点对就能求解.但是先按照熟悉的方法,写一写.最后写 P3P 方法,P3P 方法还是比较晦涩的,不是无脑方法. 1. ...
- DDoS的类型及原理
1.DDoS攻击: DDOS(Distributed Denial of Service),又称分布式拒绝服务攻击.骇客通过控制多个肉鸡或服务器组成的僵尸网络,对目标发送大量看似合法请求,从而占用大量 ...
- CF1139E Maximize Mex
题目地址:CF1139E Maximize Mex 这其实是一个二分图匹配匈牙利算法的巧妙运用 考虑倒序回答 则由原来的删除改为添加 把 potential 值作为左部,则一共有编号为 \(0~m\) ...
- mvc webapi+autofac + session 的使用
先说说我的项目情况:MVC5+AUTOFAC,下面就直接说说怎么加入webapi.autofac的配置.登录使用session 一.MVC5添加WEBAPI 1.添加 参考文章:https://blo ...