diff --git a/dashboard/templates/_nav.html b/dashboard/templates/_nav.html
index bfe6f97a4..4076efa8e 100644
--- a/dashboard/templates/_nav.html
+++ b/dashboard/templates/_nav.html
@@ -1,9 +1,9 @@
-
+
仪表盘
-
+
用户管理
@@ -12,20 +12,20 @@
用户组列表
-
+
资产管理
-
+
授权管理
-
+
审计管理
-
+
上传下载
@@ -50,7 +50,7 @@
文件下载
-
+
设置
diff --git a/docs/api_style.md b/docs/api_style.md
new file mode 100644
index 000000000..ba0315ee4
--- /dev/null
+++ b/docs/api_style.md
@@ -0,0 +1,24 @@
+### API
+
+这里仅考虑REST API的基本情况。
+
+#### HTTP Method
+
+1. 读操作使用GET方法,写操作使用PUT/POST/DELETE方法,其中删除记录的操作使用DELETE方法。
+2. 使用PUT方法实现的API必须是幂等的(多次执行同样操作,结果相同)。
+3. POST则是实现非幂等的接口。
+4. 一般性的CRUD操作,R一般使用GET方法,C使用POST,U使用PUT方法,D使用DELETE方法。
+
+#### URL
+1. /api/为api地址的prefix
+2. 每个项目的的root path后面整合的时候回指定为项目名 如: /api/assets
+3. 一般性的增删查改(CRUD)API,完全使用HTTP method加上url提供的语义,url中的可变部分(比如上面提到的)
+一般用来传递该API操作的核心实体对象的唯一ID,如果有更多的参数需要提供,GET方法请使用url parameter
+(例如:"?client_id=xxxxx&app_id=xxxxxx"),PUT/POST/DELETE方法请使用请求体传递参数。
+
+
+#### 约定
+
+1. 分页 ?page=
+2. 每页数量 ?limit=
+3.
diff --git a/docs/code_style.md b/docs/code_style.md
deleted file mode 100644
index f5b4c43f0..000000000
--- a/docs/code_style.md
+++ /dev/null
@@ -1,92 +0,0 @@
-# Jumpserver 项目规范(Draft)
-
-## 语言框架
-1. Python 2.7 由于ansible目前不支持python3
-2. Django 1.10 (最新版本)
-3. Terminal Websocket使用go实现
-
-
-## 代码风格
-
-1. Python方面大致的风格,我们采用[pocoo的Style Guidance](http://www.pocoo.org/internal/styleguide/),但是有些细节部分会尽量放开。
-2. 前端部分(js, css, html),采用[Google的HTML/CSS Coding Style Guidance](https://google.github.io/styleguide/htmlcssguide.xml)以及[JavaScript Coding Style](http://google.github.io/styleguide/javascriptguide.xml)
-3. Google的Style指南还规范了各种写法,不光包括Coding Format,请尽量遵守,但Coding Format的原则则必须遵守。
-4. Go的代码风格由@Tad指定。
-5. 所有人编码前请仔细阅读相应的代码风格指导规范,编码的时候请严格遵循,相互review代码。
-
-
-## Django规范
-1. 尽量使用Class Base View编程,更少代码
-2. 使用Django Form
-3. 每个url独立命名,不要硬编码,同理static也是
-4. 数据库表名手动指定,不要使用默认
-5. 代码优雅简洁
-6. 注释明确优美
-7. 测试案例尽可能完整
-8. 尽可能利用Django造好的轮子
-
-
-关于代码风格规范一些补充说明:
-
-### 基本的代码布局
-
-#### 缩进
-
-1. Python严格采用4个空格的缩进,不使用tab(\t),任何python代码都都必须遵守此规定。
-2. web部分代码(HTML, CSS, JavaScript),Node.js采用2空格缩进,同样不使用tab (\t)。
-之所以与Python不同,是因为js中有大量回调式的写法,2空格可以显著降低视觉上的负担。
-
-#### 最大行长度
-
-按PEP8规范,Python一般限制最大80个字符, 强制遵守。
-
-**补充说明:HTML代码不受此规范约束。**
-
-#### 长语句缩进
-
-Python代码参考pocoo style(注: 参考Flask源码)一致。JavaScript代码参考Google的Coding Format说明。
-
-#### 空行
-
-Python代码参考pocoo style一致。JavaScript代码参考Google的Coding Format说明。
-
-### 语句和表达式
-
-Python代码参考pocoo style一致。JavaScript代码参考Google的Coding Format说明。
-
-### 命名约定
-
-Python代码参考pocoo style一致。JavaScript代码参考Google的Coding Format说明。
-
-### 文档注释(Docstring,即各方法,类的说明文档注释)
-
-Python代码参考pocoo style一致。JavaScript代码参考Google的Coding Format说明。
-
-### 注释(comment)
-
-Python代码参考pocoo style一致。JavaScript代码参考Google的Coding Format说明。
-
-
-
-### Go项目
-
-请@Tad负责补完。
-
-
-### API
-
-这里仅考虑REST API的基本情况。
-
-#### HTTP Method
-
-1. 读操作使用GET方法,写操作使用PUT/POST/DELETE方法,其中删除记录的操作使用DELETE方法。
-2. 使用PUT方法实现的API必须是幂等的(多次执行同样操作,结果相同)。
-3. POST则是实现非幂等的接口。
-4. 一般性的CRUD操作,R一般使用GET方法,C使用POST,U使用PUT方法,D使用DELETE方法。
-
-#### URL
-
-1. 每个项目的的root path后面整合的时候回指定为项目名,这个不需要各项目组考虑。整合的方案可以采用Nginx来转发,后面可以详细讨论
-3. 一般性的增删查改(CRUD)API,完全使用HTTP method加上url提供的语义,url中的可变部分(比如上面提到的)一般用来传递该API操作的核心实体对象的唯一ID,如果有更多的参数需要提供,GET方法请使用url parameter(例如:"?client_id=xxxxx&app_id=xxxxxx"),PUT/POST/DELETE方法请使用请求体传递参数。
-
-**其他具体情况具体讨论**
diff --git a/docs/project_structure.md b/docs/project_structure.md
index 141058127..80f0b4636 100644
--- a/docs/project_structure.md
+++ b/docs/project_structure.md
@@ -18,14 +18,14 @@
│ │ ├── api.py // api文件
│ │ ├── __init__.py
│ │ ├── migrations // models Migrations版本控制目录
-│ │ └── __init__.py
+│ │ │ └── __init__.py
│ │ ├── models.py // 数据模型目录
│ │ ├── static // app下静态资源目录,如果需要
│ │ │ └── assets // 多一层目录,防止资源重名
-│ │ │ └── some_image.png
+│ │ │ └── some_image.png
│ │ ├── templates // app下模板目录
-│ │ └── assets // 多一层目录,防止资源重名
-│ │ └── asset_list.html
+│ │ │ └── assets // 多一层目录,防止资源重名
+│ │ │ └── asset_list.html
│ │ ├── templatetags // 模板标签目录
│ │ ├── tests.py // 测试用例文件
│ │ ├── urls.py // urlconf文件
diff --git a/docs/python_style_guide.md b/docs/python_style_guide.md
new file mode 100644
index 000000000..1f0209421
--- /dev/null
+++ b/docs/python_style_guide.md
@@ -0,0 +1,190 @@
+# Jumpserver 项目规范(Draft)
+
+## 语言框架
+1. Python 2.7 由于ansible目前不支持python3
+2. Django 1.10 (最新版本)
+3. Terminal Websocket使用go实现
+
+
+## Django规范
+1. 尽量使用Class Base View编程,更少代码
+2. 使用Django Form
+3. 每个url独立命名,不要硬编码,同理static也是
+4. 数据库表名手动指定,不要使用默认
+5. 代码优雅简洁
+6. 注释明确优美
+7. 测试案例尽可能完整
+8. 尽可能利用Django造好的轮子
+
+
+## 代码风格
+
+Python方面大致的风格,我们采用pocoo的[Style Guidance](http://www.pocoo.org/internal/styleguide/),但是有些细节部分会尽量放开
+参考国内翻译
+
+### 基本的代码布局
+
+#### 缩进
+
+1. Python严格采用4个空格的缩进,任何python代码都都必须遵守此规定。
+2. web部分代码(HTML, CSS, JavaScript),Node.js采用2空格缩进,同样不使用tab (\t)。
+之所以与Python不同,是因为js中有大量回调式的写法,2空格可以显著降低视觉上的负担。
+
+#### 最大行长度
+
+按PEP8规范,Python一般限制最大79个字符, 如果有必要最多84个字符
+
+**补充说明: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)
+```
+