Jumpserver代码规范
Jumpserver 项目规范(Draft)
语言框架
- Python 3.6.1 (当前最新)
- Django 1.11 (当前最新)
- Flask 0.12 Luna (当前最新)
- Paramiko 2.12 Coco (当前最新)
Django规范
- 尽量使用Class Base View编程,更少代码
- 使用Django Form
- 每个url独立命名,不要硬编码,同理static也是
- 数据库表名手动指定,不要使用默认
- 代码优雅简洁
- 注释明确优美
- 测试案例尽可能完整
- 尽可能利用Django造好的轮子
代码风格
Python方面大致的风格,我们采用pocoo的Style Guidance,但是有些细节部分会尽量放开 参考国内翻译
基本的代码布局
缩进
- Python严格采用4个空格的缩进,任何python代码都都必须遵守此规定。
- 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'
语句和表达式
一般空格规则
- 单目运算符与运算对象之间不空格(例如,-,~等),即使单目运算符位于括号内部也一样。
- 双目运算符与运算对象之间要空格。
exp = -1.05
value = (item_value / item_count) * offset / exp
value = my_list[index]
value = my_dict['key']
比较
- 任意类型之间的比较,使用“==”和“!=”。
- 与单例(singletons)进行比较时,使用is和is not。
- 永远不要与True或False进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)。
否定成员关系检查
使用foo not in bar,而不是not foo in bar。
命名约定
- 类名称:采用骆驼拼写法(CamelCase),首字母缩略词保持大写不变(HTTPWriter,而不是HttpWriter)。
- 变量名:小写_以及_下划线(lowercase_with_underscores)。
- 方法与函数名:小写_以及_下划线(lowercase_with_underscores)。
- 常量:大写_以及_下划线(UPPERCASE_WITH_UNDERSCORES)。
- 预编译的正则表达式:name_re。
- 受保护的元素以一个下划线为前缀。双下划线前缀只有定义混入类(mixin classes)时才使用。
- 如果使用关键词(keywords)作为类名称,应在名称后添加后置下划线(trailing underscore)。 允许与内建变量重名,不要在变量名后添加下划线进行区分。如果函数需要访问重名的内建变量,请将内建变量重新绑定为其他名称。
- 命名要有寓意, 不使用拼音,不使用无意义简单字母命名 (循环中计数例外 for i in)
- 命名缩写要谨慎, 尽量是大家认可的缩写
函数和方法的参数:
- 类方法:cls为第一个参数。
- 实例方法:self为第一个参数。
- 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代码规范相关推荐
- Python 代码规范
前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 目录 Python代码规范 一.简明概述 1.编码 如无特殊情况, 文件一律使用 U ...
- 代码规范+设计模式落地之路
欢迎关注方志朋的博客,回复"666"获面试宝典 | 前言 刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容. 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好 ...
- php 代码规范 工具,PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理
PHPStorm IDE使用CodeSniffer进行代码规范化管理 PHP_CodeSniffer是一个优秀的代码风格检测工具,定义了一系列的代码规范(通常使用官方的代码规范标准,比如PHP的PSR ...
- Verilog代码规范I
Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...
- vim php代码规范
vim 代码规范工具php-cs-fixer.phar (參考https://github.com/FriendsOfPHP/PHP-CS-Fixer) INSTALL curl http://get ...
- Scrum立会报告+燃尽图(十一月十五日总第二十三次):代码规范与技术交流
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://git.coding.net/zhang ...
- Web前端开发代码规范(基础)
一. 引言 对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护. 二. HTML/CS ...
- iOS 代码规范总结
前言:代码规范最终的目的是降低代码维护的成本. 代码规范的好处(网上一搜一大把):http://kdboy.iteye.com/blog/407572 一. 结构规范 1.文件夹的建立:注意创建的都是 ...
- 【辟谣】代码规范固然重要,但是不要再黑程序员了...
昨晚第一次看到一侧关于程序猿代码没有规范而被枪杀的文章,开始有朋友在群里吐槽几个平时代码比较"诗意"的同事,大家也就一笑而过了. 但是,今天朋友圈突然爆发一阵转载热潮,并且还在持续 ...
- Python代码规范和命名规范
http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1 Python代码规范和命名规范 前言 Python 学习之旅,先来看看 ...
最新文章
- 12JavaScript中的内置对象
- 服务器向用户返回的状态码,常用的有:
- 博客园社区登录帐号和第三方绑定的设置
- 实体类的动态生成(三)
- java 启动redis服务器_docker启动redis并使用java连接
- Bzoj2124(p5364): 等差子序列
- 介绍Flex UI测试工具:FlexMonkey
- 毕业论文查重过关最强最全规律
- java语法分析器_JavaCC语法分析器
- t480 拆触摸板_thinkpad t470怎么关闭触摸板?
- LBS定位和GPS定位的区别
- 【转】一个女孩的上海5年
- ListView--QQ联系人样式
- 树莓派+STM32人脸识别门禁系统(中)----- 树莓派部分
- 网证CTID是一种什么业务?有什么前景?
- 调用阿里云web API实现滑块验证码
- Bank相关1_数据移行
- 2019年年终个人总结
- 对酒当歌,孤寂之歌!
- DHCP和IP地址冲突