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_attributeMyModel.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!' % namedef goodbye(name):print 'See you %s.' % nameclass MyClass(object):"""This is a simple docstring."""def __init__(self, name):self.name = namedef 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 therethat it spans three lines.  In this case, the closing triple quoteis 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 stringname = Column(String)#: the sha1 hash of the password + inline saltpw_hash = Column(String)

转载于:https://www.cnblogs.com/uglyliu/p/7153142.html

Jumpserver代码规范相关推荐

  1. Python 代码规范

    前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 目录 Python代码规范 一.简明概述 1.编码 如无特殊情况, 文件一律使用 U ...

  2. 代码规范+设计模式落地之路

    欢迎关注方志朋的博客,回复"666"获面试宝典 | 前言 刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容. 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好 ...

  3. php 代码规范 工具,PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理

    PHPStorm IDE使用CodeSniffer进行代码规范化管理 PHP_CodeSniffer是一个优秀的代码风格检测工具,定义了一系列的代码规范(通常使用官方的代码规范标准,比如PHP的PSR ...

  4. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

  5. vim php代码规范

    vim 代码规范工具php-cs-fixer.phar (參考https://github.com/FriendsOfPHP/PHP-CS-Fixer) INSTALL curl http://get ...

  6. Scrum立会报告+燃尽图(十一月十五日总第二十三次):代码规范与技术交流

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://git.coding.net/zhang ...

  7. Web前端开发代码规范(基础)

    一. 引言 对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护. 二. HTML/CS ...

  8. iOS 代码规范总结

    前言:代码规范最终的目的是降低代码维护的成本. 代码规范的好处(网上一搜一大把):http://kdboy.iteye.com/blog/407572 一. 结构规范 1.文件夹的建立:注意创建的都是 ...

  9. 【辟谣】代码规范固然重要,但是不要再黑程序员了...

    昨晚第一次看到一侧关于程序猿代码没有规范而被枪杀的文章,开始有朋友在群里吐槽几个平时代码比较"诗意"的同事,大家也就一笑而过了. 但是,今天朋友圈突然爆发一阵转载热潮,并且还在持续 ...

  10. Python代码规范和命名规范

    http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1 Python代码规范和命名规范 前言 Python 学习之旅,先来看看 ...

最新文章

  1. 12JavaScript中的内置对象
  2. 服务器向用户返回的状态码,常用的有:
  3. 博客园社区登录帐号和第三方绑定的设置
  4. 实体类的动态生成(三)
  5. java 启动redis服务器_docker启动redis并使用java连接
  6. Bzoj2124(p5364): 等差子序列
  7. 介绍Flex UI测试工具:FlexMonkey
  8. 毕业论文查重过关最强最全规律
  9. java语法分析器_JavaCC语法分析器
  10. t480 拆触摸板_thinkpad t470怎么关闭触摸板?
  11. LBS定位和GPS定位的区别
  12. 【转】一个女孩的上海5年
  13. ListView--QQ联系人样式
  14. 树莓派+STM32人脸识别门禁系统(中)----- 树莓派部分
  15. 网证CTID是一种什么业务?有什么前景?
  16. 调用阿里云web API实现滑块验证码
  17. Bank相关1_数据移行
  18. 2019年年终个人总结
  19. 对酒当歌,孤寂之歌!
  20. DHCP和IP地址冲突

热门文章

  1. 【颅内出血识别问题】数据分析与可视化
  2. 【sklearn第二十六讲】模型评价
  3. 最小生成树的普里姆算法c实现
  4. 操作系统原理(三)进程管理、线程、并发和并行
  5. python_内置字符串
  6. flutter自定义View(CustomPainter) 之 canvas的方法总结
  7. Spring 基于注解的AOP实现
  8. 以向量和矩阵的视角抽象万物
  9. 涉及到大小变化,类似QScrollArea判断大小是否显示滚动条
  10. HSV颜色识别demo