Django CRM学员系统项目

项目需求:

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

展示首页

				
时间: 2024-10-05 05:00:18

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

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

crm 系统项目(一) 登录,注册,校验 首先创建一个Django项目,关于配置信息不多说,前面有~ models.py文件下创建需要的表格信息,之后导入数据库 from django.db import models from multiselectfield import MultiSelectField course_choices = (('Linux', 'Linux中高级'), ('PythonFullStack', 'Python高级全栈开发'),) class_type_choi

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

crm 系统项目(二) admin 后台操作表格 1. app下创建 templates  运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. app下在创建一个urls.py include() 3. 创建超级用户 python manage.py createsuperuser 邮箱可以忽略,密码默认为8位 4. 在admin中注册model from django.contrib import admin from crm import

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

crm 系统项目(三) 自动分页 需求: 1. 做一个自动分页, 每15条数据1页 2. 让当前页数在中间显示 3. 上一页, 下一页 注意情况: 1.总页数 小于 规定显示的页数 2. 左右两边极值情况 3. 前后端传参,交互 user_list.py {% extends 'layout.html' %} {% block content %} <table class="table table-bordered table-hover"> <thead>

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

在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的. 这种做法会导致这些问题: 要做任何设计上的更改就必须改写 Python 代码.网站的设计风格的更变一般来说会比更改后台的 Ptyhon 代码来得频繁,因此如果能够更改设计而不用更改 Python 变得尤为方便. 2 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成.设计人员和 HTML/CSS 编写人员都不应

机房收费系统——项目需求说明书

不管是学习什么材料,还是初步了解一个系统的时候,想学习新东西,听到最多的就是要了解需求,如果需求理解偏差了,那你的系统将变的面目全非. 软件需求说明书 1引言 1.1编写目的 需求分析人员与用户进行多次的需求分析调查后,提出的一份比较详细的软件需求说明书,这份说明书可以表现出软件的功能.性能.开发条件等 并且在文档完成之后需要用户进行阅读,看是否将需求表达完全,进而补充说明. 本文档的预期读者有用户.项目管理人员.文档编写人员.需求分析人员等 1.2背景 说明: a.  待开发的软件系统的名称:

如何为企业选择合适的CRM办公系统

选择合适的CRM办公系统对企业的办公流程是一个好的开头 一.企业应该选择产品化的系统还是量身定制的系统? 如何选择产品化的系统还是量身定制的CRM办公系统,取决于企业业务需求的现状,同样包括系统的页面和布局等等. 标准产品化的模式虽然不能完全满足企业特有的业务需求,但是由于系统功能都是现成的,所以项目成本小.开发周期短. 定制的CRM办公系统,在架构设计上追求平台化和灵活性,流程.表单和组织模型都能自定义,系统提供商还将提供持续升级,来满足企业不断发展变化的业务需求. 因此,从长期发展的角度看,

django 用户认证系统

django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALLED_APPS的列表里面添加django.contrib.auth和django.contrib.contenttypes这两项然后运行manage.py syncdb命令创建对应的数据库表即可 用户Users 在Django-1.4.10\django\contrib\auth这个目录下有一个mo

[转]Django与遗留系统和数据库集成

From:http://www.czug.org/python/django/17.html 尽管Django最适合从零开始开发项目--所谓的"绿色领域"开发--将框架与遗留系统和数据库集成是可能的,本章解释一些 集成策略 与遗留数据库集成 Django的数据库层从Python代码生成SQL schemas--但是对于遗留数据库,你已经拥有SQL schemas,这种情况下你需要为你 已经存在的数据库表写模型(由于性能的原因,Django的数据库层不支持通过运行时自省数据库的不工作的对

django之urls系统

Django的urls系统简介 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. URLconf配置 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 注意: