一、环境准备与项目初始化
在开始构建档案CRM系统之前,必须确保本地开发环境配置正确。本指南基于Python 3.9及Django 4.2 LTS版本编写,确保长期稳定支持。请严格按照以下步骤执行,避免因版本差异导致报错。
1. 安装依赖库
打开终端(Terminal或CMD),执行以下命令安装Django及处理图像文件的Pillow库:
```bash
pip install django==4.2 pillow
```
2. 创建项目与应用
在合适的目录下创建项目,我们将项目命名为arch_crm,应用命名为core。执行以下命令:
```bash
django-admin startproject arch_crm
cd arch_crm
python manage.py startapp core
```
3. 目录结构调整
为了规范管理,请在项目根目录下手动创建以下文件夹,用于存放静态文件和模板:
- templates/:存放HTML模板文件
- static/:存放CSS、JS等静态资源
- media/:存放用户上传的档案文件
二、数据库模型设计与配置
档案CRM的核心在于对客户档案的结构化存储。我们需要设计包含基本信息、状态追踪及文件附件的模型。打开core/models.py文件,删除原有内容,完全替换为以下代码:
```python
from django.db import models
import os
def get_upload_path(instance, filename):
"""动态生成文件上传路径,按日期归档"""
return os.path.join('archives', str(instance.id), filename)
class Archive(models.Model):
STATUS_CHOICES = (
('new', '新建'),
('contacted', '已联系'),
('signed', '已签约'),
('archived', '已归档'),
)
name = models.CharField(max_length=100, verbose_name="客户/档案名称")
contact_person = models.CharField(max_length=50, verbose_name="联系人")
phone = models.CharField(max_length=20, verbose_name="联系电话")
email = models.EmailField(blank=True, null=True, verbose_name="电子邮箱")
address = models.TextField(blank=True, null=True, verbose_name="详细地址")
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='new', verbose_name="当前状态")
description = models.TextField(blank=True, null=True, verbose_name="备注说明")
attachment = models.FileField(upload_to=get_upload_path, blank=True, null=True, verbose_name="档案附件")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
class Meta:
verbose_name = "客户档案"
verbose_name_plural = "客户档案"
ordering = ['-created_at']
def __str__(self):
return self.name
```
配置注册应用
打开arch_crm/settings.py,找到INSTALLED_APPS列表,将'core'添加进去:
```python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core', 注册自定义应用
]
```
执行数据库迁移
模型定义完成后,必须生成并执行迁移文件以创建数据库表:
```bash
python manage.py makemigrations
python manage.py migrate
```
三、后台管理系统深度定制
Django自带强大的Admin后台,我们通过配置core/admin.py,将其转化为一个可用的档案管理界面,支持搜索、筛选和列展示。
打开core/admin.py,完全替换为以下代码:
```python
from django.contrib import admin
from .models import Archive
@admin.register(Archive)
class ArchiveAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'contact_person', 'phone', 'status', 'created_at')
list_filter = ('status', 'created_at')
search_fields = ('name', 'contact_person', 'phone', 'email')
list_per_page = 20
ordering = ('-created_at',)
fieldsets = (
('基本信息', {
'fields': ('name', 'contact_person', 'phone', 'email', 'address')
}),
('状态与备注', {
'fields': ('status', 'description')
}),
('附件管理', {
'fields': ('attachment',)
}),
('时间戳', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
readonly_fields = ('created_at', 'updated_at')
```
创建超级管理员
为了登录后台,需要创建一个管理员账号:
```bash
python manage.py createsuperuser
```

按照提示输入用户名、邮箱和密码。此时运行python manage.py runserver并访问http://127.0.0.1:8000/admin即可看到管理界面。
四、前端视图与路由配置
为了给普通用户提供一个查看档案的列表页,我们需要编写视图函数和配置URL。
1. 配置URL路由
在项目根目录的arch_crm/urls.py中,配置路径指向应用视图,并处理媒体文件路由:
```python
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.archive_list, name='archive_list'),
]
开发环境下提供媒体文件服务支持
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```
2. 编写视图函数
打开core/views.py,编写查询所有档案的逻辑:
```python
from django.shortcuts import render
from .models import Archive
def archive_list(request):
archives = Archive.objects.all().order_by('-created_at')
context = {
'archives': archives
}
return render(request, 'index.html', context)
```
五、模板渲染与静态文件配置
1. 配置模板路径
回到arch_crm/settings.py,找到TEMPLATES配置项,修改'DIRS'以指向我们创建的templates目录:
```python
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], 确保此处配置正确
'APP_DIRS': True,
...
},
]
```
2. 配置媒体文件路径
在arch_crm/settings.py文件末尾添加媒体文件配置,确保上传的文件能被访问:
```python
import os
媒体文件配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
```
3. 编写HTML模板
在templates/目录下新建index.html文件,写入以下代码实现一个简洁的档案列表展示页:
```html
档案CRM管理系统
客户档案列表
| ID |
名称 |
联系人 |
电话 |
状态 |
创建时间 |
{% for archive in archives %}
| {{ archive.id }} |
{{ archive.name }} |
{{ archive.contact_person }} |
{{ archive.phone }} |
{{ archive.get_status_display }} |
{{ archive.created_at|date:"Y-m-d H:i" }} |
{% empty %}
| 暂无档案数据 |
{% endfor %}
```
六、运行与功能验证
所有代码已配置完毕,现在启动服务进行验证。
1. 启动开发服务器
```bash
python manage.py runserver
```
2. 访问前台页面
打开浏览器访问 http://127.0.0.1:8000/,此时页面应显示“暂无档案数据”。
3. 录入数据验证
- 访问
http://127.0.0.1:8000/admin 并使用刚才创建的超级管理员账号登录。
- 点击“客户档案”后的“+ 增加”按钮。
- 填写名称、联系人、电话,选择状态,并上传一个测试文件(如PDF或图片),点击保存。
- 回到前台首页
http://127.0.0.1:8000/,检查是否实时显示刚才录入的数据。
- 在后台列表页尝试搜索框输入刚才的联系人姓名,验证搜索功能是否正常。
至此,一个具备基础的增删改查、文件上传、状态筛选及搜索功能的档案CRM管理系统已完全落地。