项目需求:

1.分讲师\学员\课程顾问角色,
2.学员可以属于多个班级,学员成绩按课程分别统计
3.每个班级至少包含一个或多个讲师
4.一个学员要有状态转化的过程 ,比如未报名前,报名后,毕业老学员
5.客户要有咨询纪录, 后续的定期跟踪纪录也要保存
6.每个学员的所有上课出勤情况\学习成绩都要保存
7.学校可以有分校区,默认每个校区的员工只能查看和管理自己校区的学员
8.客户咨询要区分来源 开发一个项目 首选就是先设计好表结构 表结构设计完成 后面写代码就比较轻松了


我这边创建的项目是crm  项目名为app01

1,表结构 app01/models.py
#!/usr/bin/env python
#_*_ coding:utf8 _*_ from __future__ import unicode_literals
from django.db import models
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User course_type_choices = (
('online',u'网络班',),
('offline_weekend',u'面授班(周末)',),
('offline_fulltime',u'面授班(脱产)',),
) class School(models.Model):
name = models.CharField(max_length=128,unique=True)
city = models.CharField(max_length=64)
addr = models.CharField(max_length=128)
def __unicode__(self):
return self.name class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=64)
school = models.ForeignKey('School')
def __unicode__(self):
return self.name class Customer(models.Model):
qq = models.CharField(max_length=64,unique=True)
name = models.CharField(max_length=32,blank=True,null=True)
phone = models.BigIntegerField(blank=True,null=True)
course = models.ForeignKey('Course')
course_type = models.CharField(max_length=64,choices=course_type_choices,default='offline_weekend')
consult_memo = models.TextField()
source_type = (('qq',u"qq群"),
('referral',u"内部转介绍"),
('51cto',u"51cto"),
('agent',u"招生代理"),
('others',u"其它"),
)
source = models.CharField(max_length=64,choices=source_type)
referral_from = models.ForeignKey('self',blank=True,null=True,related_name="referraled_who")
status_choices = (('signed',u"已报名"),
('unregistered',u"未报名"),
('graduated',u"已毕业"),
('drop-off',u"退学"),
)
status = models.CharField(choices=status_choices,max_length=64)
consultant = models.ForeignKey('UserProfile',verbose_name=u"课程顾问")
class_list = models.ManyToManyField("ClassList",blank=True)
date = models.DateField(u"咨询日期",auto_now_add=True)
def __unicode__(self):
return "%s(%s)"%(self.qq,self.name) class CustomerFollowRecord(models.Model):
customer = models.ForeignKey(Customer)
track_record = models.TextField(u"跟踪记录")
track_date = models.DateField(auto_now_add=True)
follwer = models.ForeignKey(UserProfile)
status_choices = ((1,u"近期无报名计划"),
(2,u"2个月内报名"),
(3,u"1个月内报名"),
(4,u"2周内报名"),
(5,u"1周内报名"),
(6,u"2天内报名"),
(7,u"已报名"),
)
status = models.IntegerField(u"状态",choices=status_choices,help_text=u"选择客户此时的状态")
def __unicode__(self):
return self.customer class Course(models.Model):
name = models.CharField(max_length=64,unique=True)
online_price = models.IntegerField()
offline_price = models.IntegerField()
introduction = models.TextField() def __unicode__(self):
return self.name class ClassList(models.Model):
course = models.ForeignKey(Course,verbose_name=u"课程")
semester = models.IntegerField(verbose_name=u"学期")
course_type = models.CharField(max_length=64,choices=course_type_choices,default='offline_weekend')
teachers = models.ManyToManyField(UserProfile)
start_date = models.DateField()
graduate_date = models.DateField() def __unicode__(self):
return "%s(%s)(%s)"%(self.course.name,self.course_type,self.semester) class Meta:
unique_together = ('course','semester','course_type') class CourseRecord(models.Model):
class_obj = models.ForeignKey(ClassList)
day_num = models.IntegerField(u"第几节课")
course_date = models.DateField(auto_now_add=True,verbose_name=u"上课时间")
teacher = models.ForeignKey(UserProfile)
#students = models.ManyToManyField(Customer)
def __unicode__(self):
return "%s,%s"%(self.class_obj,self.day_num)
class Meta:
unique_together = ('class_obj','day_num') class StudyRecord(models.Model):
course_record = models.ForeignKey(CourseRecord)
student = models.ForeignKey(Customer)
record_choices = (('checked', u"已签到"),
('late',u"迟到"),
('noshow',u"缺勤"),
('leave_early',u"早退"),
)
record = models.CharField(u"上课纪录",choices=record_choices,default="checked",max_length=64)
score_choices = ((100, 'A+'),
(90,'A'),
(85,'B+'),
(80,'B'),
(70,'B-'),
(60,'C+'),
(50,'C'),
(40,'C-'),
(0,'D'),
(-1,'N/A'),
(-100,'COPY'),
(-1000,'FAIL'),
)
score = models.IntegerField(u"本节成绩",choices=score_choices,default=-1)
date = models.DateTimeField(auto_now_add=True)
note = models.CharField(u"备注",max_length=255,blank=True,null=True)
def __unicode__(self):
return "%s,%s,%s" %(self.course_record,self.student,self.record)

  

生成表结构

进入项目目录

cmd命令

python manage.py makemigrations 生成同步记录

  

python manage.py migrate #开始同步

后台设置 显示

admin.py

from django.contrib import admin
import models
# Register your models here. admin.site.register(models.UserProfile)
admin.site.register(models.Customer)
admin.site.register(models.CustomerFollowRecord)
admin.site.register(models.ClassList)
admin.site.register(models.Course)
admin.site.register(models.CourseRecord)
admin.site.register(models.StudyRecord)
admin.site.register(models.School)

  

  

引用bootstrap

在项目当中创建存放图片 页面 css 目录 statics

导入bootstrap

1 开始设计前端页面  我们在官网上面 找到适合自己的模板

写一个base.html模板页面

<!DOCTYPE html>
<!-- saved from url=(0041)http://v3.bootcss.com/examples/dashboard/ --> <html lang="en"><head><meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="http://v3.bootcss.com/favicon.ico"> <title>Welcome To yiyezi CRM</title> <!-- Bootstrap core CSS -->
<link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom styles for this template -->
<link href="/static/bootstrap/css/dashboard.css" rel="stylesheet">
<link href="/static/bootstrap/css/customer.css" rel="stylesheet"> </head> <body> <nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://v3.bootcss.com/examples/dashboard/#">yiyezi CRM</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="http://v3.bootcss.com/examples/dashboard/#">Dashboard</a></li>
<li><a href="http://v3.bootcss.com/examples/dashboard/#">Settings</a></li>
<li><a href="http://v3.bootcss.com/examples/dashboard/#">Profile</a></li>
<li><a href="http://v3.bootcss.com/examples/dashboard/#">Help</a></li>
</ul>
<form class="navbar-form navbar-right">
<input type="text" class="form-control" placeholder="Search...">
</form>
</div>
</div>
</nav> <div class="container-fluid">
<div class="row">
<div class="col-sm-3 col-md-2 sidebar">
<ul class="nav nav-sidebar">
<li class="active"><a href="http://v3.bootcss.com/examples/dashboard/#">Overview <span class="sr-only">(current)</span></a></li>
<li><a href="http://v3.bootcss.com/examples/dashboard/#">服务器</a></li>
<li><a href="http://v3.bootcss.com/examples/dashboard/#">Analytics</a></li>
<li><a href="http://v3.bootcss.com/examples/dashboard/#">Export</a></li>
</ul>
<ul class="nav nav-sidebar">
<li><a href="">Nav item</a></li>
<li><a href="">Nav item again</a></li>
<li><a href="">One more nav</a></li>
<li><a href="">Another nav item</a></li>
<li><a href="">More navigation</a></li>
</ul>
<ul class="nav nav-sidebar">
<li><a href="">Nav item again</a></li>
<li><a href="">One more nav</a></li>
<li><a href="">Another nav item</a></li>
</ul>
</div>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<h1 class="page-header">{% block page-header %}Your page header {% endblock %}</h1>
{% block page-content %}
put your content here
{% endblock %} </div>
</div>
</div> <!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="/static/bootstrap/js/jquery-2.1.4.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script> </body></html>

 注: 把路径写成自己存放的路径

在crm下面的settings.py 设置

可以让路径找到  设置别名

设置前端页面 首页 index.html

http://127.0.0.1:8000/crm

Urls设置

crm下面的urls设置

from django.conf.urls import url,include
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^crm/', include('app01.urls')),
]

app01项目下面的urls设置

#!/usr/bin/env python
#_*_ coding:utf8 _*_
from django.conf.urls import url,include import views
urlpatterns = [
url(r'^$', views.dashboard),
url(r'^customers/$', views.customers),
url(r'^customers/(\d+)/$', views.customer_detail),
]

查看views设置

#!/usr/bin/env python
#_*_ coding:utf8 _*_
from django.shortcuts import render
import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from app01 import forms
# Create your views here. def dashboard(request):
return render(request,'crm/dashboard.html')

  

dashboard.html代码

代码信息

{% extends "base.html" %}   #集成base.html 模板

{% block page-header %}
客户信息列表 #头部信息
{% endblock %}

 

访问地址为

http://127.0.0.1:8000/crm

展示首页

												

Django CRM学员系统项目的更多相关文章

  1. Django CRM系统

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

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

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

  3. crm 系统项目(一) 登录,注册,校验

    crm 系统项目(一) 登录,注册,校验 首先创建一个Django项目,关于配置信息不多说,前面有~ models.py文件下创建需要的表格信息,之后导入数据库 from django.db impo ...

  4. crm 系统项目(三) 自动分页

    crm 系统项目(三) 自动分页 需求: 1. 做一个自动分页, 每15条数据1页 2. 让当前页数在中间显示 3. 上一页, 下一页 注意情况: 1.总页数 小于 规定显示的页数 2. 左右两边极值 ...

  5. D django 用户认证系统

    django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALL ...

  6. 第四章:Django 的模板系统(转)

    在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的.     这种做法会导致这些问题:     要做任何设计上的更改就必须改写 Python 代 ...

  7. django之urls系统

    Django的urls系统简介 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映 ...

  8. django用户认证系统——拓展 User 模型

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  9. Python学习(三十一)—— Django之路由系统

    转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...

随机推荐

  1. Nginx1.8.0版本平滑升级新版本1.9.7

    原文:http://www.jb51.net/article/79878.htm 首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码代码如下: [root@local ...

  2. 2016年团体程序设计天梯赛-决赛 L2-3. 互评成绩(25)

    学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩.系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩.本题就要求你编写这个互评系统的算分模块. ...

  3. JS复习:第二十三章

    一.Cookie的构成: 1.名称:一个唯一确定cookie的名称.cookie名称不区分大小写,必须是经过URL编码的. 2.值:存储在cookie中的字符串值,必须被URL编码. 3.域:cook ...

  4. CF 604C Alternative Thinking#贪心

    (- ̄▽ ̄)-* #include<iostream> #include<cstdio> #include<cstring> using namespace std ...

  5. poj1741_Tree(树的点分治入门题)

    题目链接:poj1741_Tree 题意: 给你一颗n个节点的树,每条边有一个值,问有多少点对(u,v),满足u->v的最短路径小于k. 题解: 典型的树的分治,板子题. #include< ...

  6. NOIP2002-普及组复赛-第三题-选数

    题目描述 Description 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  7. CentOS安装配置JDK-7(.rpm)

    声明:本文转自:http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html 安装说明 系统环境:centos-6.3安装方式:rpm安装 ...

  8. APP测试--功能测试

    1.1 了解需求 这一点,不但是功能测试,是所有测试都需要的第1步.通过需求文档,与产品经理的沟通,与开发的沟通,用户的使用习惯等各方法,了解APP的需求. 1.2 编写测试用例 当然之前可能是测试计 ...

  9. Neutron 不健全的HA ROUTER

    首先介绍下HA,所谓的HA就是高可用性,但HA有双主.主备两种工作模式,其中主备模式又包含抢占与 非抢占两种方式,而Neutron Router采用的无疑是HA中最简单的工作方式非抢占主备模式. HA ...

  10. CSS的基本概念

    <!--CSS 一.概念:CSS的全称是Cascading Style Sheets,层叠样式表,用来控制HTML标签样式,在美化网页中起到非常重要的作用 CSS的编写格式是键值对形式的,比如 ...