zoukankan      html  css  js  c++  java
  • 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组件使用说明:

     1 使用stark组件需要完成一下几个步骤:
     2 1. 拷贝stark app到任何系统。
     3 2. 在目标project中注册stark app,如:
     4     INSTALLED_APPS = [
     5         ...
     6         'stark.apps.StarkConfig',
     7     ]
     8 3. 如果想要使用stark组件,则需要在目标app的根目录中创建 stark.py
     9 4. 配置路由信息
    10     from stark.service.stark import site
    11     urlpatterns = [
    12         ...
    13         url(r'^stark/', site.urls),
    14     ]
    15 
    16 5. 接下来就可以使用stark组件进行快速增删改查,示例:
    17     from crm import models
    18     from stark.service.stark import site, StarkConfig
    19     from django.utils.safestring import mark_safe
    20     from django.conf.urls import url
    21     from django.shortcuts import HttpResponse
    22     from django.urls import reverse
    23     from crm.config.class_list import ClassListConfig
    24 
    25     class DepartmentConfig(StarkConfig):
    26         list_display = ['id', 'title', StarkConfig.display_edit, StarkConfig.display_del]
    27 
    28 
    29     site.register(models.Department, DepartmentConfig)
    30 
    31 
    32     class UserInfoConfig(StarkConfig):
    33 
    34         def display_gender(self, row=None, header=False):
    35             if header:
    36                 return '性别'
    37             return row.get_gender_display()
    38 
    39         def display_detail(self,row=None, header=False):
    40             if header:
    41                 return '查看详细'
    42             return mark_safe('<a href="%s">%s</a>' %(reverse('stark:crm_userinfo_detail',kwargs={'pk':row.id}),row.name,))
    43 
    44         list_display = [
    45             display_detail,
    46             display_gender,
    47             'phone',
    48             'email',
    49             'depart',
    50             StarkConfig.display_edit,
    51             StarkConfig.display_del
    52         ]
    53 
    54         def extra_url(self):
    55             info = self.model_class._meta.app_label, self.model_class._meta.model_name
    56 
    57             urlpatterns = [
    58                 url(r'^(?P<pk>d+)/detail/$', self.wrapper(self.detail_view), name='%s_%s_detail' % info),
    59             ]
    60             return urlpatterns
    61 
    62         def detail_view(self,request,pk):
    63             """
    64             查看详细页面
    65             :param request:
    66             :param pk:
    67             :return:
    68             """
    69             return HttpResponse('详细页面...')
    70 
    71         search_list = ['name','depart__title']
    72 
    73 
    74     site.register(models.UserInfo, UserInfoConfig)

    4.rbac权限组件使用说明:

     1 使用rbac组件时,应用遵循以下规则:
     2 
     3 1. 清除rbac/migrations目录下所有数据库迁移记录(保留__init__.py)
     4 
     5 2. 在项目路由系统中注册rabc相关的路由信息,如:
     6     urlpatterns = [
     7         ...
     8         url(r'^rbac/', include('rbac.urls',namespace='rbac')),
     9     ]
    10 
    11 3. 注册app
    12 
    13 4. 让业务的用户表继承权限的UserInfo表
    14     如:
    15         rbac:
    16             class UserInfo(models.Model):
    17                 """
    18                 用户表
    19                 """
    20                 username = models.CharField(verbose_name='用户名', max_length=32)
    21                 password = models.CharField(verbose_name='密码', max_length=64)
    22                 email = models.CharField(verbose_name='邮箱', max_length=32)
    23                 roles = models.ManyToManyField(verbose_name='拥有的所有角色', to=Role, blank=True)
    24 
    25                 class Meta:
    26                     abstract = True
    27         crm:
    28             from rbac.models import UserInfo as RbacUserInfo
    29             class UserInfo(RbacUserInfo):
    30                 """
    31                 员工表
    32                 """
    33                 name = models.CharField(verbose_name='真实姓名', max_length=16)
    34                 phone = models.CharField(verbose_name='手机号', max_length=32)
    35 
    36                 gender_choices = (
    37                     (1,''),
    38                     (2,''),
    39                 )
    40                 gender = models.IntegerField(verbose_name='性别',choices=gender_choices,default=1)
    41 
    42                 depart = models.ForeignKey(verbose_name='部门', to="Department")
    43 
    44                 def __str__(self):
    45                     return self.name
    46 
    47 5. 数据库迁移
    48 
    49 6. rbac提供URL
    50     urlpatterns = [
    51         url(r'^menu/list/$', permission.menu_list, name='menu_list'), # rbac:menu_list
    52         url(r'^menu/add/$', permission.menu_add, name='menu_add'),
    53         url(r'^menu/edit/(?P<pk>d+)/$', permission.menu_edit, name='menu_edit'),
    54         url(r'^menu/del/(?P<pk>d+)/$', permission.menu_del, name='menu_del'),
    55         url(r'^permission/add/$', permission.permission_add, name='permission_add'),
    56         url(r'^permission/edit/(?P<pk>d+)/$', permission.permission_edit, name='permission_edit'),
    57         url(r'^permission/del/(?P<pk>d+)/$', permission.permission_del, name='permission_del'),
    58 
    59         url(r'^multi/permissions/$', permission.multi_permissions, name='multi_permissions'),
    60 
    61         url(r'^distribute/permissions/$', permission.distribute_permissions, name='distribute_permissions'),
    62         url(r'^role/list/$', permission.role_list, name='role_list'),
    63         url(r'^role/edit/(?P<pk>d+)/$', permission.role_edit, name='role_edit'),
    64         url(r'^role/del/(?P<pk>d+)/$', permission.role_del, name='role_del'),
    65     ]

     

    5.项目源码:

    我的GitHub :https://github.com/hyyc554/crm

  • 相关阅读:
    字段username没有默认值查询(设计数据库一定要养成好习惯,不是主键最好设置为可以为空)
    计算机中常见的一些概念理解
    Git常用的操作
    docker里面运行jenkins详解
    什么是持续交付
    持续集成概念理解
    Jenkins pipeline概念理解
    linux无法启动httpd服务问题
    linux关闭防火墙
    模板【Binary Indexed Tree树状数组】
  • 原文地址:https://www.cnblogs.com/huang-yc/p/9697938.html
Copyright © 2011-2022 走看看