【Django】Django项目结构与单元测试
学校的软工项目要开发一个网站,自然的想到用python+Django来做。由于之前没有用Django开发过大型的网站项目,所以遇到了一些问题。记录在此,便于以后查阅。
今天完成了项目结构的设计、部分的单元测试以及把代码使用策略模式重构。
项目结构
使用app完成功能
首先要明确网站基本的功能实现是要用各种各样的app来实现的,我觉得这样的优点有几点:
-
功能划分明确,之后修改方便。
-
因为有多个models,所以可以针对不同的功能设计数据库,也是为了功能逻辑之间的划分。
-
多个test可以更有针对性的进行测试
具体的python代码:django-admin startapp <app_name>
。
app的具体位置
因为之前看过一本16堂课学会Django架站的书,上面的提到将app放到项目文件夹下,我觉得这样不够好,因为会导致app文件夹可能与templates或static文件夹搞混的情况,同样也不是很好看;所以我这次使用了一个apps文件夹存放所有的app。
QuerySet的具体使用
这里记录一下objects的使用,链接
Django单元测试
啊这个也踩了一些坑,不过挺浅的。。。Django的单元测试是基于django.test.TestCase
这个类(继承unittest类)实现的。
具体步骤
首先编写测试类,测试类是继承TestCase类的,之后重载setUp方法,做一些测试的准备操作,我测试的是models中的数据表以及操作方法,因此import model中的各种类;然后就是编写测试方法了,我是一个一个个方法测试的,每个方法写几个test case,保证所有的分支都被覆盖。
写好了代码我发现了一个重要的问题,我不知道咋运行QAQ,求助度娘发现要用这个命令:
python manage.py test <module_name>
e.g.
python manage.py test apps.signin.tests
Django会自动地执行相应模块的所有tests。
那么做完unittest自然就想到要得到代码覆盖率,这里使用一个coverage的工具,要自己安装。
代码:(cmd)pip install coverage
图片来自这篇博客
这样就得到了代码覆盖率。
策略模式重构
把用户行为和用户本身剥离开,来避免一些内聚和耦合。由于当前项目很小,重构起来不费什么劲。。。忙活了一晚上,好像也没干啥QAQ