CRM,客戶關係管理系統(Customer Relationship Management)。企業用CRM技術來管理與客戶之間的關係,以求提高企業成功的管理方式,其目的是協助企業管理銷售循環:新客戶的招徠、保留舊客戶、提供客戶服務及進一步提高企業和客戶的關係,並運用市場營銷工具,提供創新式的我的化的客戶商談和服務,輔以相應的信息系統或信息技術如數據挖掘和數據庫營銷來協調全部公司與顧客間在銷售、營銷以及服務上的交互。git
此係統主要是以教育行業爲背景,爲公司開發的一套客戶關係管理系統。爲了擴大的系統使用範圍,特此將該項目開發改成組件化開發,讓同窗們能夠往後在本身公司快速搭建相似系統及新功能擴展。github
基於組件的軟件工程(Component-based software engineering,簡稱CBSE)或基於組件的開發(Component-Based Development,簡稱CBD)是一種軟件開發範型。它是現今軟件複用理論實用化的研究熱點,在組件對象模型的支持下,經過複用已有的構件,軟件開發者能夠「即插即用」地快速構造應用軟件。數據庫
優點:django
這樣不只能夠節省時間和經費,提升工做效率,並且能夠產生更加規範、更加可靠的應用軟件。app
模型:工具
ps:右鍵,新窗口打開查看大圖組件化
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)
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 ]
個人GitHub :https://github.com/hyyc554/crmurl