用Python打造一个CRM系统(四)

浏览: 785

在上一篇中在本地进行初始化,并让项目顺利运行。在本篇中将实现一个线索管理模块,支持线索的增删改查。

新建线索应用模块

进入项目目录,使用django命令创建线索应用模块,命令如下:

$ python manage.py startapp leads

执行成功后将会看到新增了一个目录,结构如下:

leads
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py

这个目录结构包含了模型、视图、路由、测试等内容,默认是在项目根目录下面,为了和项目的风格保持一致,需要进行下面的操作。

  1. 将目录移动到one_crm目录下面;
  2. 编辑leads下面的apps.py,将其中name改成"one_crm.leads";
  3. 将“one_crm.leads.apps.LeadsConfig”添加到config/settings/base.py文件的LOCAL_APPS变量中,使这个模块生效。

下面开始实现模型、视图、模板和路由等。

创建模型

模型是一个Python对象,它包含了数据的字段和操作方法。通常,每个模型映射为一张数据库中的表。

模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。
Django 模型使用自带的 ORM。 对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。 ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。 ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

这里定义一个线索包含名字、职称、电话、邮箱、描述、附件、创建时间、更新时间这几个字段,更新如下内容到models.py(如无说明,文件都是在leads文件夹下面的该文件):

class Lead(models.Model):
name = CharField("名字", max_length=255)
title = CharField("职称", max_length=255)
contact = CharField("联系方式", max_length=255)
email = EmailField("邮箱")
description = TextField("描述")
attachment = FileField("附件", upload_to="upload")
create_time = DateTimeField("创建时间", auto_now_add=True)
update_time = DateTimeField("上次更新时间", auto_now=True)

def __str__(self):
return self.name

创建模型之后需要更新数据库结构,先生成migrations。

在Django应用中,migrations是一系列文件,位于Django应用的migrations目录下,用以存储Django应用中的model类的变化。 每次在Django应用中对model类的修改,都会对应一个migration文件。 一个migration文件与数据库结构的schema的一个版本对应。

执行命令:

$ python manage.py makemigrations leads

然后python manage.py migrate命令更新数据库。

创建视图

Django的一个设计理念就是DRY,它提供了丰富的基础类视图可以帮开发者轻松快速的实现需要的功能。

Django类视图具有如下几个原则:
1.代码越少越好
2.永远不要重复代码
3.视图当只包含呈现逻辑, 不应包括业务逻辑
4.保持view逻辑清晰简单

常见的类视图如下:

类名功能View基本View, 可以在任何时候使用ListView显示对象列表DetailView显示对象详情CreateView创建对象UpdateView更新对象DeleteView删除对象

这里使用ListView、DetailView、CreateView、UpdateView、DeleteView实现增删改查的功能,更新views.py代码如下:

class LeadCreateView(CreateView):
"""
新建视图
"""
model = Lead
fields = ["name", "title", "contact", "email", "description", "attachment"]

lead_create_view = LeadCreateView.as_view()

class LeadUpdateView(UpdateView):
"""
更新视图
"""
model = Lead
fields = ["name", "title", "contact", "email", "description", "attachment"]

lead_update_view = LeadUpdateView.as_view()

class LeadDeleteView(DeleteView):
"""
删除视图
"""
model = Lead

success_url = reverse_lazy('leads:lead-list')

lead_delete_view = LeadDeleteView.as_view()

...

其中CreateView和UpdateView的子类要么设置 form_class,要么设置 fields,这里设置fields字段。

建立模板

使用类视图进行开发,每个视图默认会读取该模型加特定后缀的模板名,比如这里的LeadCreateView和LeadUpdateView读取的是lead_form.html,LeadListView读取的是lead_list.html,LeadDetailView读取的是lead_detail.html,LeadDeleteView读取的是lead_delete_confirm.html。模板实现基本上就是html,比较简单,这里不展开描述。这里值得一提的是django-crispy-forms这个库,使用它可以很方便的用bootstrap样式美化表单。

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端样式框架。只需要写HTML标签调用它的类你就可以很快速的做一个高大上的网页,而且不用担心兼容问题。

配置路由

完成了上面部分后就可以将线索模块配置到路由中让它在页面中正常使用,更新urls.py为如下内容:

...

app_name = "leads"

urlpatterns = [
path('add/', lead_create_view, name='lead-add'),
path('<int:pk>/', lead_detail_view, name='lead-detail'),
path('<int:pk>/update/', lead_update_view, name='lead-update'),
path('<int:pk>/delete/', lead_delete_view, name='lead-delete'),
path('', lead_list_view, name='lead-list'),
]

最后在config文件夹下的urls.py文件中urlpatterns变量中加入下面一行就可以了:

path("leads/", include("one_crm.leads.urls", namespace="leads")),

效果如下:

推荐 0
本文由 101python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册