使用自省在 Django 项目中强制执行约定

主要观点:命名约定对软件项目的维护问题影响很大,可利用 Python 的自省能力在 Django 项目中强制实施命名约定,以解决 DateField 和 DateTimeField 混淆等问题。
关键信息:

  • 存在 DateField 和 DateTimeField 命名不一致导致的各种问题,如易混淆、类型更改未同步命名等。
  • 提出的命名约定:timestamp 字段用 DateTimeField 时字段名以“_at”结尾,用 DateField 时以“_on”或“_date”结尾。
  • 用到的工具:Python 的自省功能(如 isinstance、type 等)、Django 的 app 和模型自省功能、Django 的系统检查框架。
  • 代码实现:通过定义检查函数 check_date_fields,遍历“第一方”应用的模型字段,检查字段命名是否符合约定,若不符合则发出警告。
  • 输出:运行 manage.py check 可得到检查结果,也可将此检查作为单元测试运行。
    重要细节:
  • 代码中定义了获取“第一方”应用和字段的相关函数,如 get_first_party_apps、get_first_party_fields 等,并通过自定义设置 FIRST_PARTY_APPS 来识别应用。
  • 检查函数中对例外情况进行了处理,并在警告消息中提及例外机制,以避免过度强制实施约定导致不良后果。
  • 提供了相关链接,如 Haki Benita 的文章和关于此帖的讨论。
阅读 31
0 条评论