Jumpserver 项目规范(Draft)

语言框架

  1. Python 3.6.1 (当前最新)
  2. Django 1.11 (当前最新)
  3. Flask 0.12 Luna (当前最新)
  4. Paramiko 2.12 Coco (当前最新)

Django规范

  1. 尽量使用Class Base View编程,更少代码
  2. 使用Django Form
  3. 每个url独立命名,不要硬编码,同理static也是
  4. 数据库表名手动指定,不要使用默认
  5. 代码优雅简洁
  6. 注释明确优美
  7. 测试案例尽可能完整
  8. 尽可能利用Django造好的轮子

代码风格

Python方面大致的风格,我们采用pocoo的Style Guidance,但是有些细节部分会尽量放开 参考国内翻译

基本的代码布局

缩进

  1. Python严格采用4个空格的缩进,任何python代码都都必须遵守此规定。
  2. web部分代码(HTML, CSS, JavaScript),Node.js采用2空格缩进,同样不使用tab (\t)。 之所以与Python不同,是因为js中有大量回调式的写法,2空格可以显著降低视觉上的负担。

最大行长度

按PEP8规范,Python一般限制最大79个字符, 但是Django的命名,url等通常比较长, 而且21世纪都是宽屏了,所以我们限制最大120字符

补充说明:HTML代码不受此规范约束。

长语句缩进

编写长语句时,可以使用换行符(\)换行。在这种情况下,下一行应该与上一行的最后 一个“.”句点或“=”对齐,或者是缩进4个空格符

this_is_a_very_long(function_call, 'with many parameters') \
.that_returns_an_object_with_an_attribute MyModel.query.filter(MyModel.scalar > 120) \
.order_by(MyModel.name.desc()) \
.limit(10)

如果你使用括号“()”或花括号“{}”为长语句换行,那么下一行应与括号或花括号对齐:

this_is_a_very_long(function_call, 'with many parameters',
23, 42, 'and even more')

对于元素众多的列表或元组,在第一个“[”或“(”之后马上换行:

items = [
'this is the first', 'set of items', 'with more items',
'to come in this line', 'like this'
]

空行

顶层函数与类之间空两行,此外都只空一行。不要在代码中使用太多的空行来区分不同的逻辑模块。

def hello(name):
print 'Hello %s!' % name def goodbye(name):
print 'See you %s.' % name class MyClass(object):
"""This is a simple docstring.""" def __init__(self, name):
self.name = name def get_annoying_name(self):
return self.name.upper() + '!!!!111'

语句和表达式

一般空格规则

  1. 单目运算符与运算对象之间不空格(例如,-,~等),即使单目运算符位于括号内部也一样。
  2. 双目运算符与运算对象之间要空格。
exp = -1.05
value = (item_value / item_count) * offset / exp
value = my_list[index]
value = my_dict['key']

比较

  1. 任意类型之间的比较,使用“==”和“!=”。
  2. 与单例(singletons)进行比较时,使用is和is not。
  3. 永远不要与True或False进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)。

否定成员关系检查

使用foo not in bar,而不是not foo in bar。

命名约定

  1. 类名称:采用骆驼拼写法(CamelCase),首字母缩略词保持大写不变(HTTPWriter,而不是HttpWriter)。
  2. 变量名:小写_以及_下划线(lowercase_with_underscores)。
  3. 方法与函数名:小写_以及_下划线(lowercase_with_underscores)。
  4. 常量:大写_以及_下划线(UPPERCASE_WITH_UNDERSCORES)。
  5. 预编译的正则表达式:name_re。
  6. 受保护的元素以一个下划线为前缀。双下划线前缀只有定义混入类(mixin classes)时才使用。
  7. 如果使用关键词(keywords)作为类名称,应在名称后添加后置下划线(trailing underscore)。 允许与内建变量重名,不要在变量名后添加下划线进行区分。如果函数需要访问重名的内建变量,请将内建变量重新绑定为其他名称。
  8. 命名要有寓意, 不使用拼音,不使用无意义简单字母命名 (循环中计数例外 for i in)
  9. 命名缩写要谨慎, 尽量是大家认可的缩写

函数和方法的参数:

  1. 类方法:cls为第一个参数。
  2. 实例方法:self为第一个参数。
  3. property函数中使用匿名函数(lambdas)时,匿名函数的第一个参数可以用x替代, 例如:display_name = property(lambda x: x.real_name or x.username)。

文档注释(Docstring,即各方法,类的说明文档注释)

所有文档字符串均以reStructuredText格式编写,方便Sphinx处理。文档字符串的行数不同,布局也不一样。 如果只有一行,代表字符串结束的三个引号与代表字符串开始的三个引号在同一行。 如果为多行,文档字符串中的文本紧接着代表字符串开始的三个引号编写,代表字符串结束的三个引号则自己独立成一行。 (有能力尽可能用英文, 否则请中文优雅注释)

def foo():
"""This is a simple docstring.""" def bar():
"""This is a longer docstring with so much information in there
that it spans three lines. In this case, the closing triple quote
is on its own line.
"""

文档字符串应分成简短摘要(尽量一行)和详细介绍。如果必要的话,摘要与详细介绍之间空一行。

模块头部

模块文件的头部包含有utf-8编码声明(如果模块中使用了非ASCII编码的字符,建议进行声明),以及标准的文档字符串。

# -*- coding: utf-8 -*-
"""
package.module
~~~~~~~~~~~~~~ A brief description goes here. :copyright: (c) YEAR by AUTHOR.
:license: LICENSE_NAME, see LICENSE_FILE for more details.
"""

注释(comment)

注释的规范与文档字符串编写规范类似。二者均以reStructuredText格式编写。 如果使用注释来编写类属性的文档,请在#符号后添加一个冒号":"。 (有能力尽可能用英文, 否则请中文优雅注释)

class User(object):
#: the name of the user as unicode string
name = Column(String)
#: the sha1 hash of the password + inline salt
pw_hash = Column(String)
 

Jumpserver代码规范的更多相关文章

  1. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  2. 谈谈PHP代码规范

    [转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...

  3. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  4. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

  5. 作业三: 代码规范、代码复审、PSP

    分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...

  6. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  7. C#代码规范

    C#代码规范  一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...

  8. 【转】Java代码规范

    [转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539

  9. 作业三:代码规范、代码复审、PSP

    一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...

随机推荐

  1. TCP 的有限状态机

    TCP 有限状态机的图中每一个方框都是 TCP 可能具有的状态. 每个方框中的大写英文字符串是 TCP 标准所使用的 TCP 连接状态名. 状态之间的箭头表示可能发生的状态变迁. 箭头旁边的字,表明引 ...

  2. lintcode-173-链表插入排序

    173-链表插入排序 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null 标签 ...

  3. YaoLingJump开发者日志(九)V1.1.1版本完成

    跳跃吧瑶玲下载连接 百度网盘下载 介绍   Android版本升级到8.0,发现原来的图标不显示了:   百度了一下解决方案,用了该博客提供的第二种方法,修改roundIcon的内容.   可爱的图标 ...

  4. "亿家App"问卷调查分析结果及心得体会

    一.问卷问题设计 调查背景:随着现代社会互联网的发展,基于家庭产生的服务项目也越来越多.为增加家庭之间的交流和互助,增加家庭内部.家庭与家庭之间的沟通互助,并利用互联网便捷交流的优势,使家庭在享受服务 ...

  5. Qt窗口及控件-QTreeview/QTableView排序问题

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt-QTreeview/QTableView排序问题     本文地址:http://tec ...

  6. 整理下本周工作中遇到的疑问;uid/euid/suid;docker镜像管理

    1.系统中的父子进程关系,以及docker是如何处理的这种父子进程关系,线上问题发现,子进程长时间得不到退出. 2.调用system系统调用发生了啥事情,发现大量的页表拷贝. 3.通过shell命令通 ...

  7. Code Quality

    Code Quality https://www.sonarqube.org/ java https://www.sonarsource.com/products/codeanalyzers/sona ...

  8. Winform程序部署方式总结一——ClickOnce发布

    针对Winform程序,介绍两种常用打包方式:ClickOnce和Windows Installer 应用程序如下: 一.ClickOnce发布 1.找到需要发布的项目文件,右击,从弹出的快捷菜单中找 ...

  9. HUAS 1477 经营与开发(贪心)

    考虑DP,令dp[i][j][k]当前在第i个星球,用了j次维修,k次开采后所获得的最大价值.复杂度为O(n^3).超时 如果我们发现,对于初始时能力值为w所能产生的最大价值y,初始时能力值为1所能产 ...

  10. AD高级培训PPT总结

    AD高级培训PPT总结 https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=44905&highlight=     说明: ...