Dev Principle for common project
一、原则
- 设计能简单,不复杂
- 代码模块化,接口化
- 工作文档化,协作化
- DRY (Don’t Repeat Yourself)
二、规范
2.1 项目规范
1 技术栈
Python,Django,Flask,React,Antd,Restful API
2 项目托管
Gitlab
- 项目名称
xxx-api
和xxx-fe
,api
为应用后端后端,fe
为前端项目 - 项目开发由
main
和dev
分支进行
3 项目管理
使用Gitlab Issue
或Jira
4 开发和线上环境
一般情况项目有开发dev
,测试test/nonlive/stage
,生产production
共三个环境。
5 软件版本
名称 | 版本 | 注释 |
---|---|---|
Python | 3.8+ | pyenv或conda管理 |
Django | 1.11+ | 新项目使用1.11+ |
Mysql | 5.6 | 做主从配置 |
6 服务部署
- 使用
systemd
管理服务进程 - 使用
Gitlab CI
进行自动化发布
7 工程组织
假设你的项目名为foo
, 建议目录结构:
Foo/
|-- bin/
| |-- abc.py
|
|-- deploy/
| |-- site.yml
|
|-- foo/
| |-- tests/
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- app1
| | |-- __init__.py
| | |-- admin.py
| | |-- apps.py
| | |-- models.py
| | |-- views.py
| |
| |-- app2
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
| |-- nginx.conf
| |-- foo.service
|
|-- docs/
| |-- conf.py
| |-- abc.rst
|
|-- setup.py
|-- manage.py
|-- requirements.txt
|-- README
bin/
: 存放项目的一些可执行文件,当然你可以起名script/之类的也行deploy/
: 存放部署相关文件foo/
: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/
存放单元测试代码; (3) urls、wsgi、settings以及nginx、service也放在此目录下docs/
: 存放一些文档setup.py
: 安装、部署、打包的脚本requirements.txt
: 存放软件依赖的外部Python包列表README
: 项目说明文件
2.2 编码规范
1 命名规范
- 按照
pep8
规则命名 - 注意函数动词和变量名词词性的区分
- 因为
Python
没有类型声明,可以适当加上后缀比如url_list
,info_dict
等作为区分。动态语言里头良好的命名非常重要 - 学好英语单词能为命名增色
- 名称能够精确描述该变量或者函数等的意义,具有表现力
2 代码规范
- 有些不易理解的变量或函数应作注释,难懂的代码要有注解,在文件的开始处有该文件的用途描述。一定要保持注释的一致性
- 代码应该简洁、清楚并讲述了所发生的一切,我们的目标应该是写出最清晰的代码,而不是最巧妙的代码
3 数据库
- 优先使用
ORM
,除非遇到性能问题,SQL
语句相对不好维护,同时有注入风险 - 合理使用
ORM
框架优化查询 - 合理使用
redis
、memcached
等缓存数据库优化
三、其他
3.1 开发工具
- 编辑器:pycharm,vscode
- 命令行工具:iTerm2
- 浏览器:Chrome
- 虚拟机:VirtualBox
- MySQL 数据库查询工具:Sequel Pro
- 版本控制:Git