[Update] 修改介绍

pull/1053/head
ibuler 7 years ago
commit 3fe5dadebc

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

@ -1,2 +1,12 @@
资产管理模块
=============
=============
这里介绍资产管理模块功能。
.. toctree::
:maxdepth: 1
asset_list
asset_admin_user
asset_system_user
asset_label

@ -0,0 +1,9 @@
权限管理
=========
这里介绍权限管理功能。
.. toctree::
:maxdepth: 1
permission_asset_authorized

@ -1,51 +1,11 @@
用户管理
========
用户管理模块
=============
这里介绍用户管理模块的功能。
这里介绍用户管理功能。
点击页面左侧“用户列表”菜单下的“用户列表,进入用户列表页面。
.. toctree::
:maxdepth: 1
.. contents:: Topics
.. _create_user:
创建用户
````````
点击页面左上角“创建用户”按钮,进入创建用户页面,填写账户,角色安全,个人等信息,点击“提交”按钮,用户创建完成。
.. _update_user:
更新用户
````````
点击页面右边的“更新”按钮,进入编辑用户页面,编辑用户信息,点击“提交”按钮,更新用户完成。
.. _delete_user:
删除用户
````````
点击页面右边的“删除”按钮,弹出是否删除确认框,点击“确定”按钮,删除用户完成。
.. _export_user:
导出用户
````````
选中用户,点击右上角的“导出”按钮,导出用户完成。
.. _inport_user:
导入用户
````````
点击右上角的“导入”按钮弹出导入对话框选择要导入的CSV格式文件点击“确认”按钮导入用户完成。
.. _batch_operation:
批量操作
````````
选中用户,选择页面左下角的批量操作选项,点击”提交“按钮,批量操作完成。
user
user_group
login_log

@ -0,0 +1,9 @@
作业中心
=========
这里介绍作业中心功能。
.. toctree::
:maxdepth: 1
work_center_list

@ -0,0 +1,35 @@
管理用户
==========
这里介绍管理用户的功能。
.. contents:: Topics
.. _view_admin_user_list:
查看管理用户列表
````````````````
点击页面左侧“资产管理“菜单下的“管理用户”按钮,进入管理用户列表页面,查看管理用户的名称、资产数等信息。
.. _create_admin_user:
创建管理用户
````````````
点击页面左上角的“创建管理用户“按钮进入创建管理用户界面填写名称、用户名、密码、ssh私钥等信息点击“提交”按钮完成管理用户创建。
.. _update_admin_user:
更新管理用户
````````````
点击页面右边动作栏的“更新”按钮,进入更新管理用户页面,编辑管理用户的信息,点击“提交”按钮,完成管理用户更新。
.. _delete_admin_user:
删除管理用户
````````````
点击页面右边动作栏的“删除”按钮,弹出删除确认框,点击"确认"按钮,管理用户删除完成。

@ -0,0 +1,2 @@
标签管理
============

@ -0,0 +1,41 @@
资产列表
===========
这里介绍资产列表的功能。
.. contents:: Topics
.. _view_asset_list:
查看资产列表
`````````````
点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
.. _create_asset:
创建资产
````````````
点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息,点击“提交”按钮,完成资产创建。
.. _update_asset:
更新资产
````````````
点击页面右边的“更新”按钮,进入编辑资产页面,更新资产信息,点击“提交”按钮,完成资产更新。
.. _delete_asset:
删除资产
`````````
点击页面右边的“删除”按钮,弹出删除确认框,点击“确认”按钮,完成资产删除。
.. _batch_operation:
批量操作
````````````
选中资产,选择页面左下角批量操作选项,点击“提交”按钮,完成批量操作。

@ -0,0 +1,4 @@
系统用户
===========
这里介绍系统用户功能。

@ -20,7 +20,7 @@ import sphinx_rtd_theme
# -- Project information -----------------------------------------------------
project = 'jumpserver'
project = 'Jumpserver'
copyright = '北京堆栈科技有限公司 © 2014-2018'
author = 'Jumpserver team'
@ -88,7 +88,7 @@ html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
#
html_theme_options = {
'logo_only': True,
'display_version': False
'display_version': True
}
# Add any paths that contain custom static files (such as style sheets) here,
@ -137,7 +137,7 @@ latex_elements = {
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'jumpserver.tex', 'jumpserver Documentation',
(master_doc, 'Jumpserver.tex', 'Jumpserver Documentation',
'Jumpserver team', 'manual'),
]
@ -147,7 +147,7 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'jumpserver', 'jumpserver Documentation',
(master_doc, 'Jumpserver', 'Jumpserver Documentation',
[author], 1)
]
@ -158,8 +158,8 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'jumpserver', 'jumpserver Documentation',
author, 'jumpserver', 'One line description of project.',
(master_doc, 'Jumpserver', 'Jumpserver 文档',
author, 'Jumpserver', ' Jumpserver是全球首款完全开源的堡垒机是符合 4A 的专业运维审计系统',
'Miscellaneous'),
]

@ -1,6 +1,11 @@
联系方式
+++++++++++++++++++++++++
商业支持
~~~~~~~~~~~
https://market.aliyun.com/products/53690006/cmgj026011.html
QQ群
~~~~~~~~
@ -11,7 +16,7 @@ QQ群
Github
~~~~~~~~
https://github.com/jumpserver/jumpserver.git

@ -1,13 +1,17 @@
贡献者
++++++++++++++++++++++++
=============
感谢一下朋友为Jumpserver做出的贡献世界因你们而不同排名不分先后
- **小彧 <李磊>** Django资深开发者为用户模块贡献了很多代码
- **sofia <周小侠>** 资深前端工程师, 前端代码贡献者
- **liuz <刘正> 全栈工程师** 编写了Web terminal大部分代码
- **小彧 <李磊>** Django 资深开发者,为用户模块贡献了很多代码
- **sofia <周小侠>** 资深前端工程师, 前端代码贡献者
- **liuz <刘正> 全栈工程师** 编写了 Web Terminal 大部分代码
- **jiaxiangkong <陈尚委>** Jumpserver测试运营
- **halcyon <王墉>** DevOps 资深开发者, 0.3.2 核心开发者之一
- **yumaojun03 <喻茂峻>** DevOps 资深开发者擅长Python, Go以及PAAS平台开发
- **kelianchun <柯连春>** DevOps 资产开发者fix了很多bug
- **yumaojun03 <喻茂峻>** DevOps 资深开发者擅长Python, Go以及 PaaS 平台开发
- **kelianchun <柯连春>** DevOps 资产开发者fix了很多bug
- **q4speed <莫鹍>** 架构师,贡献了 0.5.0 Windows 远程桌面登录大部分代码
- **ZhangFengyi <张峰毅>** 贡献了 0.5.0 新版文档
- **Aaron3S <沈晨阳>** 贡献了 0.5.0 新版文档
- **liqiang-fit2cloud <张立强>** 0.5.0 版本测试,给资产树设计贡献了很多建议

@ -1,2 +0,0 @@
FAQ
+++++++++++++++++++++

@ -6,24 +6,16 @@
Jumpserver 文档
======================================
目录:
.. toctree::
:maxdepth: 2
:caption: 文档:
intro
introduce
installation
admin_guide
user_guide
development
contributor
contact
faq
索引
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
snapshot

@ -0,0 +1,12 @@
总体介绍
==================
欢迎来到 Jumpserver 文档。
Jumpserver是全球首款完全开源的堡垒机使用GNU GPL v2.0开源协议,是符合 4A 的专业运维审计系统。
Jumpserver使用Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
Jumpserver采纳分布式架构支持多机房跨区域部署中心节点提供 API各机房部署登录节点可横向扩展、无并发访问限制。
改变世界,从一点点开始。

@ -0,0 +1,6 @@
登录日志
==========
这里介绍登录日志的功能。
点击页面左侧“用户管理”菜单下的“登录日志”按钮,进入登录日志页面。

@ -1,4 +0,0 @@
#### [项目结构描述](https://code.simcu.com/jumpserver/jumpserver/blob/master/docs/project_structure.md)
#### [Python代码规范](https://code.simcu.com/jumpserver/jumpserver/blob/master/docs/python_style_guide.md)
#### [API设计规范](https://code.simcu.com/jumpserver/jumpserver/blob/master/docs/api_style_guide.md)
#### [表结构](https://code.simcu.com/jumpserver/jumpserver/wikis/table_structure_image)

@ -1,148 +0,0 @@
## REST API规范约定
这里仅考虑REST API的基本情况。参考
[RESTful API 设计指南](http://www.ruanyifeng.com/blog/2014/05/restful_api.html)
[github api文档](https://developer.github.com/v3/)
### 协议
API与用户的通信协议总是使用HTTPs协议。
### 域名
这版api相对简单, 没有前后端分离, 没有独立app, 所以放在主域名下
```
https://example.org/api/
```
### 版本
将API的版本号放入URL中, 由于一个项目多个app所以Jumpserver使用以下风格,
将版本号放到app后面
```
https://example.com/api/:app:/:version:/:resource:
https://example.com/api/assets/v1.0/assets [GET, POST]
https://example.com/api/assets/v1.0/assets/1 [GET, PUT, DELETE]
```
### 路径
路径又称"终点"endpoint表示API的具体网址。
在RESTful架构中每个网址代表一种资源resource所以网址中不能有动词只能有名词而且所用的名词往往与数据库的表格名对应。一般来说数据库中的表都是同种记录的"集合"collection所以API中的名词也应该使用复数。
举例来说 cmdb中的assets列表, idc列表
```
https://example.com/api/:app:/:version:/:resource:
https://example.com/api/assets/v1.0/assets [GET, POST]
https://example.com/api/assets/v1.0/assets/1 [GET, PUT, DELETE]
https://example.com/api/assets/v1.0/idcs [GET, POST]
```
一般性的增删查改(CRUD)API完全使用HTTP method加上url提供的语义url中的可变部分比如上面提到的<role_id>
一般用来传递该API操作的核心实体对象的唯一ID如果有更多的参数需要提供GET方法请使用url parameter
(例如:"?client_id=xxxxx&app_id=xxxxxx")PUT/POST/DELETE方法请使用请求体传递参数。
### HTTP Method
对于资源的具体操作类型由HTTP动词表示。
常用的HTTP动词有下面五个括号里是对应的SQL命令
- GETSELECT从服务器取出资源一项或多项
- POSTCREATE在服务器新建一个资源。
- PUTUPDATE在服务器更新资源客户端提供改变后的完整资源, 幂等
- PATCHUPDATE在服务器更新资源客户端提供改变的属性
- DELETEDELETE从服务器删除资源。
### 过滤信息
常见参数约定
```
?keyword=localhost 模糊搜索
?limit=10指定返回记录的数量
?offset=10指定返回记录的开始位置。
?page=2&per_page=100指定第几页以及每页的记录数。
?sort=name&order=asc指定返回结果按照哪个属性排序以及排序顺序。
?asset_id=1指定筛选条件
```
### 状态码
服务器向用户返回的状态码和提示信息常见的有以下一些方括号中是该状态码对应的HTTP动词
- 200 OK - [GET]服务器成功返回用户请求的数据该操作是幂等的Idempotent
- 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
- 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
- 204 NO CONTENT - [DELETE]:用户删除数据成功。
- 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
- 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
- 403 Forbidden - [*] 表示用户得到授权与401错误相对但是访问是被禁止的。
- 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
- 406 Not Acceptable - [GET]用户请求的格式不可得比如用户请求JSON格式但是只有XML格式
- 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
- 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
- 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
### 错误处理
如果状态码是4xx就应该向用户返回出错信息。一般来说返回的信息中将error作为键名出错信息作为键值即可。
```
{
error: "Invalid API key"
}
```
### 返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范。
```
GET /collection返回资源对象的列表数组
GET /collection/resource返回单个资源对象
POST /collection返回新生成的资源对象
PUT /collection/resource返回完整的资源对象
PATCH /collection/resource返回完整的资源对象
DELETE /collection/resource返回一个空文档
```
### Hypermedia API
RESTful API最好做到Hypermedia即返回结果中提供链接连向其他API方法使得用户不查文档也知道下一步应该做什么。
比如当用户向api.example.com的根目录发出请求会得到这样一个文档。
```
{"link": {
"rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}
```
上面代码表示文档中有一个link属性用户读取这个属性就知道下一步该调用什么API了。
rel表示这个API与当前网址的关系collection关系并给出该collection的网址
href表示API的路径title表示API的标题type表示返回类型。
Hypermedia API的设计被称为HATEOAS。
Github的API就是这种设计.
### 其它
1API的身份认证应该使用OAuth 2.0框架。
2服务器返回的数据格式应该尽量使用JSON

@ -1,295 +0,0 @@
#!/usr/bin/env python
# ~*~ coding: utf-8 ~*~
#
from django.core.paginator import InvalidPage, Paginator
class View(object):
http_method_names = []
def __init__(self, **kwargs):
pass
@classmethod
def as_view(cls, **initkwargs):
pass
def dispatch(self, request, *args, **kwargs):
pass
def http_method_not_allowed(self, request, *args, **kwargs):
pass
def options(self, request, *args, **kwargs):
pass
def _allowed_method(self):
pass
class TemplateResponseMixin(object):
template_name = None
template_engine = None
response_class = None
content_type = None
def render_to_response(self, context, **response_kwargs):
pass
def get_template_name(self):
pass
class ContextMixin(object):
def get_context_data(self, **kwargs):
pass
class RedirectView(View):
permanent = False
url = None
pattern_name = None
query_string = False
def get_redirect_url(self, *args, **kwargs):
pass
def get(self, request, *args, **kwargs):
pass
def head(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
pass
def options(self, request, *args, **kwargs):
pass
def delete(self, request, *args, **kwargs):
pass
def put(self, request, *args, **kwargs):
pass
def patch(self, request, *args, **kwargs):
pass
class TemplateView(TemplateResponseMixin, ContextMixin, View):
def get(self, request, *args, **kwargs):
pass
class SingleObjectMixin(ContextMixin):
model = None
queryset = None
slug_field = 'slug'
context_object_name = None
slug_url_kwarg = 'slug'
pk_url_kwarg = 'pk'
query_pk_and_slug = False
def get_object(self):
pass
def get_queryset(self):
pass
def get_slug_field(self):
pass
def get_context_object_name(self, obj):
pass
def get_context_data(self, **kwargs):
pass
class BaseDetailView(SingleObjectMixin, View):
def get(self, request, *args, **kwargs):
pass
class SingleObjectTemplateResponseMixin(TemplateResponseMixin):
template_name_field = None
template_name_suffix = '_detail'
def get_template_name(self):
pass
class DetailView(SingleObjectTemplateResponseMixin, BaseDetailView):
pass
class FormMixin(ContextMixin):
initial = {}
form_class = None
success_url = None
prefix = None
def get_initial(self):
pass
def get_prefix(self):
pass
def get_form_class(self):
pass
def get_form(self, form_class):
pass
def get_form_kwargs(self):
pass
def get_success_url(self):
pass
def form_valid(self, form):
pass
def form_invalid(self, form):
pass
def get_context_data(self, **kwargs):
pass
class ModelFormMixin(FormMixin, SingleObjectMixin):
fields = None
def get_form_class(self):
pass
def get_form_kwargs(self):
pass
def get_success_url(self):
pass
def form_valid(self, form):
pass
class ProcessFormView(View):
def get(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
pass
def put(self, request, *args, **kwargs):
pass
class BaseFormView(FormMixin, ProcessFormView):
pass
class FormView(TemplateResponseMixin, BaseFormView):
pass
class BaseCreateView(ModelFormMixin, ProcessFormView):
def get(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
pass
class CreateView(SingleObjectTemplateResponseMixin, BaseCreateView):
template_name_suffix = '_form'
class BaseUpdateView(ModelFormMixin, ProcessFormView):
def get(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
pass
class UpdateView(SingleObjectTemplateResponseMixin, BaseUpdateView):
template_name_suffix = '_form'
class DeletionMixin(object):
success_url = None
def delete(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
pass
def get_success_url(self):
pass
class BaseDeleteView(DeletionMixin, BaseDetailView):
pass
class DeleteView(SingleObjectTemplateResponseMixin, BaseDeleteView):
pass
class MultipleObjectMixin(ContextMixin):
allow_empty = True
queryset = None
model = None
paginate_by = None
paginate_orphans = 0
context_object_name = None
paginator_class = Paginator
page_kwarg = 'page'
ordering = None
def get_queryset(self):
pass
def get_ordering(self):
pass
def paginate_queryset(self, queryset, page_size):
pass
def get_paginate_by(self, queryset):
pass
def get_paginator(self, queryset, per_page, orphans=0,
allow_empty_first_page=True, **kwargs):
pass
def get_paginate_orphans(self):
pass
def get_allow_empty(self):
pass
def get_context_object_name(self, object_list):
pass
def get_context_data(self, **kwargs):
pass
class BaseListView(MultipleObjectMixin, View):
def get(self, request, *args, **kwargs):
pass
class MultipleObjectTemplateResponseMixin(TemplateResponseMixin):
template_name_suffix = '_list'
def get_template_name(self):
pass
class ListView(MultipleObjectTemplateResponseMixin, BaseListView):
pass

@ -1 +0,0 @@
More see [安装文档](https://github.com/jumpserver/jumpserver/wiki/v0.5.0-%E5%9F%BA%E4%BA%8E-CentOS7)

@ -1,50 +0,0 @@
## 项目骨架
说明如下:
```
.
├── config-example.py // 配置文件样例
├── docs // 所有doc文件放到该目录
│ └── README.md
├── LICENSE
├── README.md
├── install // 安装说明
├── logs // 日志目录
├── apps // 管理后台目录也是各app所在目录
│ └── assets // app目录
│ │ ├── admin.py
│ │ ├── apps.py // 新版本django app设置文件
│ │ ├── api.py // api文件
│ │ ├── __init__.py // 对外暴露的接口放到该文件中方便别的app引用
│ │ ├── migrations // models Migrations版本控制目录
│ │ │ └── __init__.py
│ │ ├── models.py // 数据模型目录
│ │ ├── static // app下静态资源目录,如果需要
│ │ │ └── assets // 多一层目录,防止资源重名
│ │ │ └── some_image.png
│ │ ├── templates // app下模板目录
│ │ │ └── assets // 多一层目录,防止资源重名
│ │ │ └── asset_list.html
│ │ ├── templatetags // 模板标签目录
│ │ ├── tests.py // 测试用例文件
│ │ ├── urls.py // urlconf文件
│ │ ├── utils.py // 将views和api可复用的代码放在这里, api和views只是请求和返回不同
│ │ └── views.py // views文件
│ ├── common
│ │ ├── templatetags // 通用template tag
│ │ ├── utils.py // 通用的函数方法
│ │ └── views.py
│ ├── fixtures // 初始化数据目录
│ │ ├── init.json // 初始化项目数据库
│ │ └── fake.json // 生成大量测试数据
│ ├── jumpserver // 项目设置目录
│ │ ├── __init__.py
│ │ ├── settings.py // 项目设置文件
│ │ ├── urls.py // 项目入口urlconf
│ │ └── wsgi.py
│ ├── manage.py
│ ├── static // 项目静态资源目录
  ├── i18n                     // 项目多语言目录
│ └── templates // 项目模板目录
```

@ -1,194 +0,0 @@
# 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](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个字符, 但是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)
```

@ -1,795 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- SQL XML created by WWW SQL Designer, https://github.com/ondras/wwwsqldesigner/ -->
<!-- Active URL: http://ondras.zarovi.cz/sql/demo/?keyword=default -->
<sql>
<datatypes db="mysql">
<group color="rgb(238,238,170)" label="Numeric">
<type label="Integer" quote="" sql="INTEGER" length="0"/>
<type label="TINYINT" quote="" sql="TINYINT" length="0"/>
<type label="SMALLINT" quote="" sql="SMALLINT" length="0"/>
<type label="MEDIUMINT" quote="" sql="MEDIUMINT" length="0"/>
<type label="INT" quote="" sql="INT" length="0"/>
<type label="BIGINT" quote="" sql="BIGINT" length="0"/>
<type label="Decimal" quote="" sql="DECIMAL" length="1" re="DEC"/>
<type label="Single precision" quote="" sql="FLOAT" length="0"/>
<type label="Double precision" quote="" sql="DOUBLE" length="0" re="DOUBLE"/>
</group>
<group color="rgb(255,200,200)" label="Character">
<type label="Char" quote="'" sql="CHAR" length="1"/>
<type label="Varchar" quote="'" sql="VARCHAR" length="1"/>
<type label="Text" quote="'" sql="MEDIUMTEXT" length="0" re="TEXT"/>
<type label="Binary" quote="'" sql="BINARY" length="1"/>
<type label="Varbinary" quote="'" sql="VARBINARY" length="1"/>
<type label="BLOB" quote="'" sql="BLOB" length="0" re="BLOB"/>
</group>
<group color="rgb(200,255,200)" label="Date &amp; Time">
<type label="Date" quote="'" sql="DATE" length="0"/>
<type label="Time" quote="'" sql="TIME" length="0"/>
<type label="Datetime" quote="'" sql="DATETIME" length="0"/>
<type label="Year" quote="" sql="YEAR" length="0"/>
<type label="Timestamp" quote="'" sql="TIMESTAMP" length="0"/>
</group>
<group color="rgb(200,200,255)" label="Miscellaneous">
<type label="ENUM" quote="" sql="ENUM" length="1"/>
<type label="SET" quote="" sql="SET" length="1"/>
<type label="Bit" quote="" sql="bit" length="0"/>
</group>
</datatypes><table x="399" y="254" name="user">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="username" null="0" autoincrement="0">
<datatype>VARCHAR(20)</datatype>
<default>'NULL'</default></row>
<row name="first_name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="last_name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="password" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="email" null="0" autoincrement="0">
<datatype>VARCHAR(30)</datatype>
</row>
<row name="avatar" null="1" autoincrement="0">
<datatype>BINARY</datatype>
<default>NULL</default></row>
<row name="wechat" null="1" autoincrement="0">
<datatype>VARCHAR(20)</datatype>
<default>NULL</default></row>
<row name="phone" null="1" autoincrement="0">
<datatype>VARBINARY</datatype>
<default>NULL</default></row>
<row name="is_staff" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>0</default></row>
<row name="is_active" null="0" autoincrement="0">
<datatype>INTEGER</datatype>
<default>0</default></row>
<row name="enable_otp" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>0</default></row>
<row name="role" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="private_key" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="public_key" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="date_joined" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>'now()'</default></row>
<row name="date_expaired" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="last_login" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="205" y="363" name="role">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="399" y="102" name="user_group">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="165" y="151" name="user_user_group">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="usergroup_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="user_group" row="id" />
</row>
<row name="user_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="user" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="201" y="486" name="permission">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="codename" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="content_type" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="cententtype" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="28" y="582" name="cententtype">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="app_label" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="model" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="3" y="364" name="role_permission">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="role_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="role" row="id" />
</row>
<row name="permmision_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="permission" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1081" y="268" name="asset">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="hostname" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="ip" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="port" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="other_ip" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="mac_addr" null="1" autoincrement="0">
<datatype>VARBINARY</datatype>
<default>NULL</default></row>
<row name="username" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="password" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="admin_user" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="admin_user" row="id" />
</row>
<row name="idc" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="idc" row="id" />
</row>
<row name="remote_card_ip" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="type" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset_extend" row="id" />
</row>
<row name="brand" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="os" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="sn" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="number" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="cabinet_no" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="cabinet_pos" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="env" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset_extend" row="id" />
</row>
<row name="cpu" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="memory" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="disk" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="is_active" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1301" y="687" name="asset_extend">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="key" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="value" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1294" y="379" name="idc">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="address" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="operator" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="contact" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="phone" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="network" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="brandwidth" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1269" y="220" name="asset_label">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="asset_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset" row="id" />
</row>
<row name="key" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="value" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1080" y="102" name="asset_group">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1261" y="101" name="asset_asset_group">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="asset_group_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset_group" row="id" />
</row>
<row name="asset_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1289" y="806" name="admin_user">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="username" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="password" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="private_key" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="is_default" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="auto_update" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="create_by" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="720" y="571" name="system_user">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="username" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="protocol" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="password" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="private_key" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="public_key" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="is_default" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="auto_push" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="auto_update" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="sudo" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="shell" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="home" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="uid" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="873" y="572" name="asset_system_user">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="system_user_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="system_user" row="id" />
</row>
<row name="asset_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="878" y="743" name="task_history">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="task_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="task" row="id" />
</row>
<row name="asset_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="is_finished" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="is_failed" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="message" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="date_finished" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1079" y="918" name="task">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="is_finished" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="date_finished" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="744" y="322" name="perm">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="date_expired" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="comment" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="created_by" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="date_created" null="1" autoincrement="0">
<datatype>TIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="560" y="184" name="user_group_perm">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="user_group_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="user_group" row="id" />
</row>
<row name="perm_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="perm" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="560" y="361" name="user_perm">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="user_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="user" row="id" />
</row>
<row name="perm_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="perm" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="868" y="184" name="asset_group_perm">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="asset_group_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset_group" row="id" />
</row>
<row name="perm_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="perm" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="872" y="411" name="asset_perm">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="asset_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="asset" row="id" />
</row>
<row name="perm_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="perm" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="268" y="776" name="login_log">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="username" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="login_type" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="login_ip" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="login_city" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="user_agent" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="date_login" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default></row>
<row name="date_logout" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="108" y="775" name="admin_log">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="username" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="resource" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="action" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="detail" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="description" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="418" y="775" name="proxy_log">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="username" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="hostname" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="ip" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="sysuser" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="login_type" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="log_file" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="is_finished" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="date_finished" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="567" y="575" name="commandlog">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="proxy_log" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="proxy_log" row="id" />
</row>
<row name="command" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="output" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default></row>
<row name="date_finished" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="585" y="786" name="notice">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="to_user_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="user" row="id" />
</row>
<row name="from_user_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="user" row="id" />
</row>
<row name="notice_method" null="1" autoincrement="0">
<datatype>CHAR</datatype>
<default>NULL</default></row>
<row name="type" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="title" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="detail" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="is_read" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default></row>
<row name="date_read" null="1" autoincrement="0">
<datatype>TIME</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
</sql>

@ -0,0 +1,34 @@
个人资产
=========
这里介绍资产授权的相关的功能。
.. contents:: Topics
.. _view_asset_authorized:
查看资产授权规则列表
````````````````````
资产授权页面默认展示资产授权列表。点击左侧资产节点树下的节点,右侧展示此节点下的资产授权规则。
.. _create_asset_authorized:
创建授权规则
````````````
在左侧资产节点树下选择要创建授权规则的节点,点击页面右侧创建授权规则进入创建授权规则页面,填写授权规则信息,点击提交,完成创建授权规则。
.. _update_asset_authorized:
更新授权规则
````````````
在左侧资产节点树下选择要更新授权规则的节点,在右侧授权规则列表中找到要更新的授权规则,点击“动作”标题下的“更新”按钮进入授权规则更新页面,填写授权规则信息,点击提交,完成创建授权规则。
.. _delete_asset_authorized:
删除授权规则
````````````
在左侧资产节点树下选择要删除授权规则的节点,在右侧授权规则列表中找到要删除的授权规则,点击“动作”标题下的“删除”按钮,弹出确认删除页面,点击确认,完成删除授权规则。

@ -34,8 +34,7 @@ Guidance`_\ ,但是有些细节部分会尽量放开 参考国内翻译
^^^^
1. Python严格采用4个空格的缩进任何python代码都都必须遵守此规定。
2. web部分代码(HTML, CSS,
JavaScript)Node.js采用2空格缩进同样不使用tab (:raw-latex:`\t`)。
2. web部分代码(HTML, CSS,JavaScript)Node.js采用2空格缩进同样不使用tab。
之所以与Python不同是因为js中有大量回调式的写法2空格可以显著降低视觉上的负担。
最大行长度

@ -0,0 +1,27 @@
Snapshot 截图
+++++++++++++++++
仪表盘
~~~~~~~~
.. image:: _static/img/dash_board.png
用户管理
~~~~~~~~~~
.. image:: _static/img/admin_user.png
资产管理
~~~~~~~~~~
.. image:: _static/img/admin_asset.png
Linux 终端
~~~~~~~~~~~~~
.. image:: _static/img/linux_terminal.png
Windows 终端
~~~~~~~~~~~~~~~~
.. image:: _static/img/windows_terminal.png

@ -0,0 +1,51 @@
用户列表
========
这里介绍用户列表的功能。
点击页面左侧“用户列表”菜单下的“用户列表“,进入用户列表页面。
.. contents:: Topics
.. _create_user:
创建用户
````````
点击页面左上角“创建用户”按钮,进入创建用户页面,填写账户,角色安全,个人等信息,点击“提交”按钮,用户创建完成。
.. _update_user:
更新用户
````````
点击页面右边的“更新”按钮,进入编辑用户页面,编辑用户信息,点击“提交”按钮,更新用户完成。
.. _delete_user:
删除用户
````````
点击页面右边的“删除”按钮,弹出是否删除确认框,点击“确定”按钮,删除用户完成。
.. _export_user:
导出用户
````````
选中用户,点击右上角的“导出”按钮,导出用户完成。
.. _import_user:
导入用户
````````
点击右上角的“导入”按钮弹出导入对话框选择要导入的CSV格式文件点击“确认”按钮导入用户完成。
.. _batch_user_operation:
批量操作
````````
选中用户,选择页面左下角的批量操作选项,点击”提交“按钮,批量操作完成。

@ -0,0 +1,29 @@
用户组列表
============
这里介绍用户组列表的功能。
点击页面左侧“用户管理”菜单下的”用户组“,进入用户组列表页面。
.. contents:: Topics
.. _create_user_group:
创建用户组
``````````
点击页面左上角“创建用户组”按钮,进入创建用户组页面,填写用户组信息,点击“提交”按钮,创建用户完成。
.. _update_user_group:
更新用户组
``````````
点击页面右边的“更新”按钮,进入编辑用户组页面,编辑用户组信息,点击“确认”按钮,更新用户组完成。
.. _delete_user_group:
删除用户组
````````````
点击页面右边的“删除”按钮,弹出删除确认框,点击“确认”按钮,删除用户组完成。

@ -0,0 +1,35 @@
任务列表
=========
这里介绍任务列表的相关的功能。
.. contents:: Topics
.. _view_asset_works:
查看任务列表
````````````
任务列表页面默认展示一周内所有任务。点击标题可根据当前字段进行排序。
.. _invoke_asset_work:
手动执行任务
````````````
在任务列表中找到要手动执行的任务,点击“动作”标题下的“执行”按钮,完成手动执行当前任务。
.. _delete_asset_work:
删除任务
`````````
在任务列表中找到要删除的任务,点击“动作”标题下的“删除”按钮,完成删除当前任务。
.. _detial_asset_work:
查看任务详情
`````````````
在任务列表中找到要查看的任务,点击要查看的任务名称,即可进入任务详情页面。
Loading…
Cancel
Save