Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
2f06a2b1
Commit
2f06a2b1
authored
Jan 31, 2018
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Feature] tree增删功能
parent
1ac30ed0
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
66 additions
and
21 deletions
+66
-21
api.py
apps/assets/api.py
+39
-18
serializers.py
apps/assets/serializers.py
+25
-2
tree.html
apps/assets/templates/assets/tree.html
+0
-0
api_urls.py
apps/assets/urls/api_urls.py
+2
-1
No files found.
apps/assets/api.py
View file @
2f06a2b1
...
...
@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from
rest_framework
import
generics
from
rest_framework
import
generics
,
mixins
from
rest_framework.views
import
APIView
from
rest_framework.response
import
Response
from
rest_framework_bulk
import
BulkModelViewSet
...
...
@@ -21,6 +21,7 @@ from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView
from
rest_framework.pagination
import
LimitOffsetPagination
from
django.shortcuts
import
get_object_or_404
from
django.db.models
import
Q
,
Count
from
django.utils.translation
import
ugettext_lazy
as
_
from
common.mixins
import
CustomFilterMixin
from
common.utils
import
get_logger
...
...
@@ -311,21 +312,41 @@ class LabelViewSet(BulkModelViewSet):
return
super
()
.
list
(
request
,
*
args
,
**
kwargs
)
class
TreeViewApi
(
APIView
):
class
NodeViewSet
(
BulkModelViewSet
):
queryset
=
Node
.
objects
.
all
()
permission_classes
=
(
IsSuperUser
,)
serializer_class
=
serializers
.
NodeSerializer
def
get_queryset
(
self
):
return
Node
.
objects
.
all
()
def
get
(
self
,
request
):
data
=
[]
for
node
in
self
.
get_queryset
():
parent
=
":"
.
join
(
node
.
id
.
split
(
":"
)[:
-
1
])
d
=
{
"id"
:
node
.
id
,
"pId"
:
parent
,
"name"
:
node
.
name
}
if
node
.
id
==
"0"
:
d
[
"open"
]
=
True
data
.
append
(
d
)
return
Response
(
data
)
def
perform_create
(
self
,
serializer
):
child_id
=
Node
.
get_root_node
()
.
get_next_child_id
()
serializer
.
validated_data
[
"id"
]
=
child_id
serializer
.
save
()
class
NodeChildrenApi
(
mixins
.
ListModelMixin
,
generics
.
CreateAPIView
):
queryset
=
Node
.
objects
.
all
()
permission_classes
=
(
IsSuperUser
,)
serializer_class
=
serializers
.
NodeSerializer
instance
=
None
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
if
not
request
.
data
.
get
(
"name"
):
request
.
data
[
"name"
]
=
_
(
"New node {}"
)
.
format
(
Node
.
get_root_node
()
.
get_next_child_id
()
.
split
(
":"
)[
-
1
]
)
return
super
()
.
post
(
request
,
*
args
,
**
kwargs
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
get_object
()
name
=
request
.
data
.
get
(
"name"
)
node
=
instance
.
create_child
(
name
=
name
)
return
Response
({
"id"
:
node
.
id
,
"name"
:
node
.
name
},
status
=
201
)
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
get_object
()
if
self
.
request
.
query_params
.
get
(
"all"
):
children
=
instance
.
get_all_children
()
else
:
children
=
instance
.
get_children
()
response
=
[{
"id"
:
node
.
id
,
"name"
:
node
.
name
}
for
node
in
children
]
return
Response
(
response
,
status
=
200
)
apps/assets/serializers.py
View file @
2f06a2b1
...
...
@@ -4,8 +4,8 @@ from rest_framework import serializers
from
rest_framework_bulk.serializers
import
BulkListSerializer
from
common.mixins
import
BulkSerializerMixin
from
.models
import
AssetGroup
,
Asset
,
Cluster
,
AdminUser
,
SystemUser
,
Label
from
.const
import
ADMIN_USER_CONN_CACHE_KEY
,
SYSTEM_USER_CONN_CACHE_KEY
from
.models
import
AssetGroup
,
Asset
,
Cluster
,
AdminUser
,
SystemUser
,
Label
,
Node
from
.const
import
ADMIN_USER_CONN_CACHE_KEY
class
AssetGroupSerializer
(
BulkSerializerMixin
,
serializers
.
ModelSerializer
):
...
...
@@ -316,3 +316,26 @@ class LabelDistinctSerializer(serializers.ModelSerializer):
def
get_value
(
obj
):
labels
=
Label
.
objects
.
filter
(
name
=
obj
[
"name"
])
return
', '
.
join
([
label
.
value
for
label
in
labels
])
class
NodeSerializer
(
serializers
.
ModelSerializer
):
parent
=
serializers
.
SerializerMethodField
()
class
Meta
:
model
=
Node
fields
=
[
'id'
,
'name'
,
'parent'
]
list_serializer_class
=
BulkListSerializer
@staticmethod
def
get_parent
(
obj
):
if
obj
.
id
==
"0"
:
return
"#"
if
not
obj
.
id
.
startswith
(
"0"
):
return
"0"
return
":"
.
join
(
obj
.
id
.
split
(
":"
)[:
-
1
])
def
get_fields
(
self
):
fields
=
super
()
.
get_fields
()
field
=
fields
[
"id"
]
field
.
required
=
False
return
fields
apps/assets/templates/assets/tree.html
View file @
2f06a2b1
This diff is collapsed.
Click to expand it.
apps/assets/urls/api_urls.py
View file @
2f06a2b1
...
...
@@ -13,6 +13,7 @@ router.register(r'v1/clusters', api.ClusterViewSet, 'cluster')
router
.
register
(
r'v1/admin-user'
,
api
.
AdminUserViewSet
,
'admin-user'
)
router
.
register
(
r'v1/system-user'
,
api
.
SystemUserViewSet
,
'system-user'
)
router
.
register
(
r'v1/labels'
,
api
.
LabelViewSet
,
'label'
)
router
.
register
(
r'v1/nodes'
,
api
.
NodeViewSet
,
'node'
)
urlpatterns
=
[
url
(
r'^v1/assets-bulk/$'
,
api
.
AssetListUpdateApi
.
as_view
(),
name
=
'asset-bulk-update'
),
...
...
@@ -42,7 +43,7 @@ urlpatterns = [
api
.
SystemUserPushApi
.
as_view
(),
name
=
'system-user-push'
),
url
(
r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]{36})/connective/$'
,
api
.
SystemUserTestConnectiveApi
.
as_view
(),
name
=
'system-user-connective'
),
url
(
r'^v1/
tree/$'
,
api
.
TreeViewApi
.
as_view
(),
name
=
'tree-view'
)
url
(
r'^v1/
nodes/(?P<pk>[0-9:]+)/children/$'
,
api
.
NodeChildrenApi
.
as_view
(),
name
=
'node-children'
),
]
urlpatterns
+=
router
.
urls
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment