编码规范
Python的 The Zen of Python (PEP 20) 是Python编码的最佳实践的浓缩。在编写Django项目的代码时,我们要求:
PEP8
PEP8作为Python官方的编程规范,对命名、缩进、注释等各个方面都有详细的规定。代码提交review之前,所有的文件都应该符合PEP8要求(如果你记不住那些规则,找一个你使用的IDE的插件来检验)。每次代码提交之后,我们的Jenkins上也有PEP8的检查。如果不幸(不幸是指,违反PEP8的文件都不应该上传到代码库)发现了PEP8的violation,要及时去查看并处理。
如果你加入的项目本来就没有遵循PEP8规范,那么就按照项目现有的风格来完成你的开发。你可以在PEP8的 A Foolish Consistency is the Hobgoblin of Little Minds 查看这样做的原因以及其他可以不遵循PEP8的万不得已的情况。
Imports的管理
PEP8建议 import
应该按照下面的顺序来排列:
在Django项目中,我们使用的导入顺序一般如下例所示:
实际的开发中imports不需要像例子1.1那样注释,这里只是为了更清楚地说明。
所以我们的 import
顺序为:
使用显式声明的相对路径导入
Python里面使用显式声明的相对路径导入来对各个module进行解耦。我们先看一个使用硬编码路径而不是相对路径导入的例子:
虽然在当前项目里面这样的导入是没有问题的但是会严重降低模块的移植性和重用性:
- 如果你需要在其他项目里面使用这个
report
app,但是那个项目里面已经有一个叫report
的包了呢? - 如果你突然发现用户要的是图表而不是表格,所以这个app的名字要从
report
要改成chart
呢?
如果是硬编码的导入,出现上面的需求时,你就得到每个文件里面去把这些导入都改一遍。下面我们看看如何使用显式的相对路径导入:
下面总结一下Python里面不同的导入方式和它们在Django项目中使用的方式:
Code | 导入方式 | 用途 |
---|---|---|
from core.views import FoodMixin |
绝对路径导入 |
从当前app之外导入 |
from .models import WaffleCone |
显式声明的相对路径 |
推荐用来从当前app的另一个module中导入 |
from cones.models import WaffleCone |
隐式声明的相对路径 |
常被用来从当前app的另一个module中导入,不推荐 |