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