django——CRM項目

1.引言

CRM,客戶關係管理系統(Customer Relationship Management)。企業用CRM技術來管理與客戶之間的關係,以求提高企業成功的管理方式,其目的是協助企業管理銷售循環:新客戶的招徠、保留舊客戶、提供客戶服務及進一步提高企業和客戶的關係,並運用市場營銷工具,提供創新式的我的化的客戶商談和服務,輔以相應的信息系統或信息技術如數據挖掘和數據庫營銷來協調全部公司與顧客間在銷售、營銷以及服務上的交互。git

此係統主要是以教育行業爲背景,爲公司開發的一套客戶關係管理系統。爲了擴大的系統使用範圍,特此將該項目開發改成組件化開發,讓同窗們能夠往後在本身公司快速搭建相似系統及新功能擴展。github

  • 權限系統,一個獨立的rbac組件。
  • stark組件,一個獨立的curd組件。
  • crm業務,以教育行業爲背景並整合以上兩個組件開發一套系統。

基於組件的軟件工程:

 基於組件的軟件工程(Component-based software engineering,簡稱CBSE)或基於組件的開發(Component-Based Development,簡稱CBD)是一種軟件開發範型。它是現今軟件複用理論實用化的研究熱點,在組件對象模型的支持下,經過複用已有的構件,軟件開發者能夠「即插即用」地快速構造應用軟件數據庫

優點:django

這樣不只能夠節省時間和經費,提升工做效率,並且能夠產生更加規範、更加可靠的應用軟件app

模型:工具

 

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/crmurl

相關文章
相關標籤/搜索