一、环境配置

1、首先配置pip,环境变量配置

pip 9.0.1 from c:\users\administrator\envs\crm\lib\site-packages (python 3.6)

2、安装虚拟环境

C:\Users\Administrator>pip install virtualenvwrapper-win

Collecting virtualenvwrapper-win

Downloading virtualenvwrapper-win-1.2.4.tar.gz

Collecting virtualenv (from virtualenvwrapper-win)

Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)

100% |████████████████████████████████| 1.8MB 393kB/s

Installing collected packages: virtualenv, virtualenvwrapper-win

Running setup.py install for virtualenvwrapper-win ... done

Successfully installed virtualenv-15.1.0 virtualenvwrapper-win-1.2.4

3、创建crm这个虚拟环境

C:\Users\Administrator>mkvirtualenv crm

C:\Users\Administrator\Envs is not a directory, creating

Using base prefix 'c:\\users\\administrator\\appdata\\local\\programs\\python\\python36'

New python executable in C:\Users\Administrator\Envs\crm\Scripts\python.exe

Installing setuptools, pip, wheel...done.

环境

(crm) C:\Users\Administrator>python --version

Python 3.6.3

(crm) C:\Users\Administrator>pip list

Django (1.11)

pip (9.0.1)

pytz (2017.3)

setuptools (38.2.3)

wheel (0.30.0)

二、创建项目

项目创建:

指定创建的环境

env->scripts->python.exe

组件:

django

boostrap

jquery

准备:

1)创建project

python manage.py startapp app01

2)设计表结构

目录结构:

权限:

1)每个人的信息别人不能看

2)领导能看到的信息别人不能看

表结构如下:

from django.db import models
from django.contrib.auth.models import User class Customer(models.Model):
"""客户信息表
blank是用于限制admin null为了限制数据库,所以这两个成对出现
"""
name = models.CharField(max_length=,blank=True,null=True)
qq = models.CharField(max_length=,unique=True)
phone = models.CharField(max_length=,blank=True,null=True,help_text="电话")
source_choices = ((,"转介绍"),
(,"qq群"),
(,"官网"),
(,"51cto"),
(,"知乎"),
(,"市场推广")) source = models.SmallIntegerField(choices=source_choices,help_text="来源")
referral_from = models.CharField(verbose_name="转介绍人qq",max_length=,blank=True,null=True)
consult_course = models.ForeignKey("Course",verbose_name="咨询课程")
content = models.TextField(verbose_name="咨询详情")
consultant = models.ForeignKey("UserProfile",verbose_name="那个人的销售记录")
date = models.DateTimeField(auto_now_add=True,verbose_name="时间,这里自增")
memo=models.CharField(blank=True,null=True,verbose_name="备注")
tags = models.ManyToManyField("Tag",blank=Tag,null=True,verbose_name="和标签多对多") def __str__(self):
return self.qq class Tag(models.Model):
name=models.CharField(unique=True,max_length=,verbose_name="标签") def __str__(self):
return self.name class CustomerFollowUp(models.Model):
"""客户跟进表"""
customer = models.ForeignKey("Customer",verbose_name="和客户多对一")
content = models.TextField(verbose_name="跟进内容")
consultant = models.ForeignKey("UserProfile",verbose_name="跟进人")
date = models.DateTimeField(auto_now=True)
intention_choice = ((,"2周内报名"),
(,"1个月内报名"),
(,"近期无报名计划"),
(,"已在其他机构报名"),
(,"已报名"),
(,"已拉黑"))
intention = models.SmallIntegerField(choices=intention_choice,verbose_name="报名计划")
date = models.DateTimeField(auto_now_add=True,verbose_name="时间") def __str__(self):
return "<%s:%s>"%(self.customer.qq,self.intention) class Course(models.Model):
"""课程表"""
name = models.CharField(max_length=,unique=True,verbose_name="课程名字")
price = models.PositiveIntegerField(verbose_name="价格")
period=models.PositiveIntegerField(verbose_name="课程周期")
outline=models.TextField(verbose_name="课程大纲") def __str__(self):
return self.name class branch(models.Model):
"""校区"""
name=models.CharField(max_length=,unique=True)
addr = models.CharField(max_length=) def __str__(self):
return self.name class ClassList(models.Model):
"""班级表"""
branch=models.ForeignKey("branch",verbose_name="和校区关联")
course=models.ForeignKey("Course",verbose_name="和课程关联")
class_type_choice=((,"面授"),
(,"周末"),
(,"网络"),)
class_type=models.SmallIntegerField(choices=class_type_choice,verbose_name="开班类型")
semester = models.PositiveIntegerField(verbose_name="学期")
teachers = models.ManyToManyField("UserProfile",verbose_name="老师和账号关联")
start_date = models.DateTimeField(verbose_name="开班日期")
end_date = models.DateTimeField(verbose_name="毕业日期",blank=True,null=True) def __str__(self):
return "%s %s %s"%(self.branch,self.course,self.semester) class Meta:
unique_together=("branch","course","semester") class CourseRecord(models.Model):
"""上课记录表"""
from_class = models.ForeignKey("ClassList", verbose_name="关联班级")
day_num = models.PositiveIntegerField(verbose_name="第几节(天)")
teacher = models.ForeignKey("UserProfile",verbose_name="老师")
has_homework = models.BooleanField(default=True,verbose_name="是否有作业")
homework_title= models.CharField(max_length=,blank=True,null=True,verbose_name="作业头部信息")
homework_content = models.TextField(blank=True,null=True,verbose_name="作业内容")
online = models.TextField(verbose_name="本节课程大纲")
date = models.DateTimeField(auto_now_add=True) def __str__(self):
return "%s %s"%(self.from_class,self.day_num) class Meta:
unique_together=("from_class","day_num")
verbose_name_plural="上课记录表" class StudyRecord(models.Model):
"""学习记录表"""
student = models.ForeignKey("Enrollment",verbose_name="关联报名表")
course_record = models.ForeignKey("CourseRecord",verbose_name="和上课记录关联")
attendance_choices = ((,"已签到"),
(,"迟到"),
(,"缺勤"),
(,"早退"))
attendanc = models.SmallIntegerField(choices=attendance_choices,default=,verbose_name="上课状态")
score_choices=((,"A+"),
(,"A"),
(,"B+"),
(,"B"),
(,"B-"),
(,"C+"),
(,"C"),
(,"C-"),
(-,"D"),
(-,"COPY"),
(,"N/A"))
score = models.SmallIntegerField(choices=score_choices,default=,verbose_name="分数")
memo = models.TextField(blank=True,null=True,verbose_name="备注")
date = models.DateTimeField(auto_now_add=True) def __str__(self):
return "%s %s %s"%(self.student,self.course_record,self.score) class Enrollment(models.Model):
"""报名表"""
customer = models.ForeignKey("Customer",verbose_name="那个人报名")
enrolled_class = models.ForeignKey("ClassList",verbose_name="所报班级")
consultant = models.ForeignKey("UserProfile",verbose_name="课程顾问")
contract_agreed = models.BooleanField(default=False,verbose_name="学员已经同意合同条款")
contract_approved = models.BooleanField(default=False,verbose_name="合同已经审核")
date = models.DateTimeField(auto_now_add=True) def __str__(self):
return "%s %s"%(self.customer,self.enrolled_class) class Meta:
unique_together=("customer","enrolled_class") class Payment(models.Model):
"""缴费记录"""
customer=models.ForeignKey("Customer")
course = models.ForeignKey("Course",verbose_name="所报课程")
amount = models.PositiveIntegerField(verbose_name="数额",default=)
consultant = models.ForeignKey("UserProfile",verbose_name="用户")
date = models.DateTimeField(auto_now_add=True) def __str__(self):
return "%s %s"%(self.customer,self.amount) class UserProfile(models.Model):
"""账号表"""
user=models.OneToOneField(User)
name = models.CharField(max_length=)
roles = models.ManyToManyField("Role",blank=True,null=True) def __str__(self):
return self.name class Role(models.Model):
"""角色表"""
name = models.CharField(max_length=,unique=True) def __str__(self):
return self.name

注意这里的账号表中的user和django.contrib.auth.models中的User是一对一的关系

三、配置数据库

1、首先下载数据库 具体

2、下载navicat

crm销售管理系统一的更多相关文章

  1. CRM企业管理系统一年多少钱?

    CRM系统一年多少钱?这是很多企业管理者比较关心的问题.目前市面上的CRM系统分为本地部署型和云部署型.云部署型CRM费用相对较低,只需要按需购买账号,连接网络即可使用:本地部署型CRM费用较高,企业 ...

  2. 如何借助CRM销售管理系统提升业绩?

    与传统企业销售模式不同,现代企业在网络背书下,销售活动与网络密切相关.销售数据需要网络保存,销售渠道需要网络挖掘.在线的销售软件让销售活动起到了事半功倍的效果.CRM销售管理系统是企业必不可少的在线软 ...

  3. 3 CRM 销售与客户 我的客户,公共客户池

    1.销售与客户的表结构 1.公共客户与我的客户 ---公共客户(公共资源) 1.没有报名 2.3天没有跟进 3.15天没有成单 客户分布表 龙泰 男 yuan 2018-5-1 3天未跟进 龙泰 男 ...

  4. CRM - 销售与客户

    一.销售与客户 - 表结构 ---公共客户(公共资源) 1.没有报名 2.3天没有跟进 3.15天没有成单 客户分布表 龙泰 男 yuan 2018-5-1 3天未跟进 龙泰 男 三江 2018-5- ...

  5. CRM——销售与客户

    一.销售与客户——表结构 1.客户类型 (1)公共客户(公共资源) 必备条件:没有报名: 在必备条件满足的情况下,满足以下任意条件都是公共客户: 3天没有跟进:15天没有成单. (2)我的客户 原销售 ...

  6. step byt step之餐饮管理系统一

    之前写过2015年的工作计划,其中有一项就是写一套管理系统,一来可以练练手,二来可以加强自己的学习,三来可以多园友多交流,共同进步.所以从今天开始把写系统的过程记录下来.先需求分析开始. 第一部分 引 ...

  7. EasyUI+MVC4实现后台管理系统一:登陆和进入后台界面

    首先实现登陆: 未完待续...

  8. Django 练习班级管理系统一

    创建项目 user_manager 和 app为 app01 models.py 为 from django.db import models # Create your models here. c ...

  9. CRM系统不仅给企业带来更多收益而且提升销售效率

    将客户信息记录在CRM系统的数据库中,同时共享沟通数据给售前.售后.SDR等上下游,客户资源还能够按照分配规则分配给适合的销售人员,帮助更快成单.全面使用CRM系统会给企业带来更多业绩. 1.全方位客 ...

随机推荐

  1. /dev/null简介

    在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF[1]. 在程序员行话,尤其是Unix行话中,/d ...

  2. 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式

    1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:   同步/异步主要针对C端: 同步:    ...

  3. Laravel5.1 请求

    这篇主要说说Request 每当用户访问我们的网站功能时都会用到它 我们可以使用Request中的一些数据来做出适当的相应. 1 常用的属性和方法 我们可以从Request中取到一些重要属性来做一些逻 ...

  4. Laravel 5.1 数组帮助函数(随发现更新)

    array_add 向一个数组中添加指定键值,如果键值不存在则添加,如果键本身就存在 那么就不添加: $test_array = ['name' => '大K', 'age' => 27] ...

  5. CMU-15445 LAB3:事务隔离,two-phase locking,锁管理器

    概述 本lab将实现一个锁管理器,事务通过锁管理器获取锁,事务管理器根据情况决定是否授予锁,或是阻塞等待其它事务释放该锁. 背景 事务属性 众所周知,事务具有如下属性: 原子性:事务要么执行完成,要么 ...

  6. codevs1058 合唱队形==洛谷P1091 合唱队形

    P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的 ...

  7. docker postgres

    启动一个 Postgres 实例 docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d daocloud.i ...

  8. MySQL复制(一):复制的基本步骤

    从这里开始,对复制的内容开始做一些详细的描述,复制从简单到入门 复制最简单的模式如下 基本的三个简单步骤 1 配置一个服务器为master 2 配置一个服务器为slave 3 将slave连接到mas ...

  9. MySQL中myisam和innodb的主键索引有什么区别?

    MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索 ...

  10. Mac下最好用的文本编辑器

    友情提醒:图多杀猫. 曾经在Windows下一直用gVim.能够用键盘控制一切,操作起来是又快又爽,还支持一大堆插件.想怎么玩就怎么玩.后来转Mac后,也沿袭着之前的习惯.一直在用终端的Vim.偶尔会 ...