Python开发实践经验

栏目: Python · 发布时间: 6年前

内容简介:这是我在公司项目中写下的约定, 该项目使用Python3开发, 分享出来, 希望对大家也会有一些帮助

这是我在公司项目中写下的约定, 该项目使用 Python 3开发, 分享出来, 希望对大家也会有一些帮助

  • 项目杜绝循环引用, 包之间的引用关系为( -> 表示被引用)

    models -> controllers -> application ^ ^ \ / \ utils service

  • 包内相对引用,包外绝对引用

  • controllers , models , utils 都是 package ,使用 __all__ 来管控其下面的成员, 所有代码使用如下方式导入:

    from itachi.models import Base 而不是 from itachi.models.base import Base

    单元测试除外, 单元测试可能需要mock包内成员, 所以可能需要跳过 __all__ 的限制

  • 每个单元测试用例必须自己清理自己创建的数据

  • 单元测试必须继承 tests/base.py -> BaseCase , 使用 prehookposthook 替代 setUptearDown , 因为base中处理的app的context顺序会影响单元测试(因为这个项目用的是flask,所以这一点比较蛋疼)

  • 每次修改完数据库,必须显示commit session.commit()

  • 禁止使用 lazy import 这种方式来规避循环引用,正确的方式是合理的规划代码组织, 参见第一条

  • 推送使用接口来定义, 见 itachi/services/push/base.py , 由于python没有明确声明接口的方式, 所以还请人为遵守

  • 异步任务task应当是可重入的, 会配置为重试

  • 显示优于隐式, 所以不要用各种trick

  • requirements.txtrequirements-dev.txt 分别对应正式和开发环境的依赖, 其中后者仅包含前者的增量部分

  • 严禁for循环查数据库,请使用连表代替,连表时请把一次性能过滤最多的条件放在上面(即区分度最大的条件)

  • 请求第三方接口一定要设置超时

  • 使用 Docker 容器部署,必须设置CPU和内存上限,且不得与所在机器内存大小相同或非常接近.

  • 数据库(MySQL)使用 utf8mb4 (而不是 utf8 )作为默认的字符集, 因为 MySQLutf8 不是我们平日里所说的utf8,它只能利用 最多三个字节,因此无法使用存储emoji

目前发现的可以改善的地方

  • [x] session可以和request脱离,手动 session = Session() 而非 app.before_request

  • [ ] constants 可以使用 Enum


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

乐在C语言

乐在C语言

蔡明志 / 2013-1 / 39.00元

《乐在C语言》由蔡明志所著,本书内容的撰写上,以浅显易懂的文字,并搭配简短的范例程序,以及通俗幽默的漫画,讲述每一章的主题,真正做到了繁杂的问题通俗化,通俗化了的问题实例化,使读者得到事半功倍的学习效果。《乐在C语言》基本包括了C语言编程的全部内容,如变量、函数、指针、结构体、文件等。每一章都有上机实习,这些题目是从范例程序中加以演变的,以便读者能举一反三,达到学以致用。 《乐在C语......一起来看看 《乐在C语言》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具