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
409fac3e
Commit
409fac3e
authored
8 years ago
by
ibuler
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'admin-user'
parents
62cac20b
239dd056
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
224 additions
and
59 deletions
+224
-59
forms.py
apps/assets/forms.py
+53
-2
0001_initial.py
apps/assets/migrations/0001_initial.py
+10
-10
models.py
apps/assets/models.py
+12
-11
admin_user_create_update.html
apps/assets/templates/assets/admin_user_create_update.html
+65
-0
admin_user_detail.html
apps/assets/templates/assets/admin_user_detail.html
+0
-0
admin_user_list.html
apps/assets/templates/assets/admin_user_list.html
+1
-1
asset_group_detail.html
apps/assets/templates/assets/asset_group_detail.html
+19
-19
views.py
apps/assets/views.py
+61
-12
fake.json
apps/fixtures/fake.json
+0
-0
user_detail.html
apps/users/templates/users/user_detail.html
+2
-2
urls.py
apps/users/urls.py
+0
-1
views.py
apps/users/views.py
+1
-1
No files found.
apps/assets/forms.py
View file @
409fac3e
# coding:utf-8
from
django
import
forms
from
.models
import
IDC
,
Asset
,
AssetGroup
from
.models
import
IDC
,
Asset
,
AssetGroup
,
AdminUser
,
SystemUser
from
django.utils.translation
import
gettext_lazy
as
_
...
...
@@ -11,7 +11,7 @@ class AssetForm(forms.ModelForm):
fields
=
[
"ip"
,
"other_ip"
,
"remote_card_ip"
,
"hostname"
,
"port"
,
"groups"
,
"username"
,
"password"
,
"idc"
,
"mac_addr"
,
"brand"
,
"cpu"
,
"memory"
,
"disk"
,
"os"
,
"cabinet_no"
,
"cabinet_pos"
,
"idc"
,
"mac_addr
ess
"
,
"brand"
,
"cpu"
,
"memory"
,
"disk"
,
"os"
,
"cabinet_no"
,
"cabinet_pos"
,
"number"
,
"status"
,
"type"
,
"env"
,
"sn"
,
"is_active"
,
"comment"
]
...
...
@@ -78,3 +78,54 @@ class IDCForm(forms.ModelForm):
'network'
:
forms
.
Textarea
(
attrs
=
{
'placeholder'
:
'192.168.1.0/24
\n
192.168.2.0/24'
})
}
class
AdminUserForm
(
forms
.
ModelForm
):
assets
=
forms
.
ModelMultipleChoiceField
(
queryset
=
Asset
.
objects
.
all
(),
label
=
_
(
'Asset'
),
required
=
False
,
widget
=
forms
.
SelectMultiple
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'Select assets'
)})
)
password
=
forms
.
CharField
(
widget
=
forms
.
PasswordInput
,
max_length
=
100
,
min_length
=
8
,
strip
=
True
,
help_text
=
_
(
'If also set private key, use that first'
),
required
=
False
)
private_key_file
=
forms
.
FileField
(
required
=
False
)
def
__init__
(
self
,
*
args
,
**
kwargs
):
if
kwargs
.
get
(
'instance'
):
initial
=
kwargs
.
get
(
'initial'
,
{})
initial
[
'assets'
]
=
kwargs
[
'instance'
]
.
assets
.
all
()
super
(
AdminUserForm
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
def
_save_m2m
(
self
):
super
(
AdminUserForm
,
self
)
.
_save_m2m
()
assets
=
self
.
cleaned_data
[
'assets'
]
self
.
instance
.
assets
.
clear
()
self
.
instance
.
assets
.
add
(
*
tuple
(
assets
))
def
save
(
self
,
commit
=
True
):
admin_user
=
super
(
AdminUserForm
,
self
)
.
save
(
commit
=
commit
)
password
=
self
.
cleaned_data
[
'password'
]
private_key_file
=
self
.
cleaned_data
[
'private_key_file'
]
if
password
:
admin_user
.
password
=
password
print
(
password
)
if
private_key_file
:
print
(
private_key_file
)
admin_user
.
private_key
=
private_key_file
.
read
()
admin_user
.
save
()
return
self
.
instance
class
Meta
:
model
=
AdminUser
fields
=
[
'name'
,
'username'
,
'password'
,
'private_key_file'
,
'as_default'
,
'comment'
]
widgets
=
{
'name'
:
forms
.
TextInput
(
attrs
=
{
'placeholder'
:
_
(
'Name'
)}),
'username'
:
forms
.
TextInput
(
attrs
=
{
'placeholder'
:
_
(
'Username'
)}),
}
help_texts
=
{
'name'
:
'* required'
,
'username'
:
'* required'
,
}
This diff is collapsed.
Click to expand it.
apps/assets/migrations/0001_initial.py
View file @
409fac3e
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-09-0
7 15:11
# Generated by Django 1.10 on 2016-09-0
8 03:02
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
...
...
@@ -18,15 +18,15 @@ class Migration(migrations.Migration):
name
=
'AdminUser'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'name'
,
models
.
CharField
(
blank
=
True
,
max_length
=
128
,
null
=
True
,
unique
=
True
,
verbose_name
=
'Name'
)),
(
'username'
,
models
.
CharField
(
blank
=
True
,
max_length
=
16
,
null
=
True
,
verbose_name
=
'Username'
)),
(
'password'
,
models
.
CharField
(
blank
=
True
,
max_length
=
256
,
null
=
True
,
verbose_name
=
'Password'
)),
(
'private_key'
,
models
.
CharField
(
blank
=
True
,
max_length
=
4096
,
null
=
True
,
verbose_name
=
'SSH private key'
)),
(
'is_default'
,
models
.
BooleanField
(
default
=
True
,
verbose_name
=
'As default'
)),
(
'auto_update'
,
models
.
BooleanField
(
default
=
True
,
verbose_name
=
'Auto update pass/key'
)),
(
'date_created'
,
models
.
DateTimeField
(
auto_now
=
True
,
null
=
True
)),
(
'create_by'
,
models
.
CharField
(
blank
=
True
,
max_length
=
32
,
null
=
True
,
verbose_name
=
'Created by'
)),
(
'name'
,
models
.
CharField
(
max_length
=
128
,
unique
=
True
,
verbose_name
=
'Name'
)),
(
'username'
,
models
.
CharField
(
max_length
=
16
,
verbose_name
=
'Username'
)),
(
'_password'
,
models
.
CharField
(
blank
=
True
,
max_length
=
256
,
verbose_name
=
'Password'
)),
(
'_private_key'
,
models
.
CharField
(
blank
=
True
,
max_length
=
4096
,
verbose_name
=
'SSH private key'
)),
(
'_public_key'
,
models
.
CharField
(
blank
=
True
,
max_length
=
4096
,
verbose_name
=
'SSH public key'
)),
(
'as_default'
,
models
.
BooleanField
(
default
=
False
,
verbose_name
=
'As default'
)),
(
'comment'
,
models
.
TextField
(
blank
=
True
,
verbose_name
=
'Comment'
)),
(
'date_created'
,
models
.
DateTimeField
(
auto_now
=
True
,
null
=
True
)),
(
'created_by'
,
models
.
CharField
(
max_length
=
32
,
null
=
True
,
verbose_name
=
'Created by'
)),
],
options
=
{
'db_table'
:
'admin_user'
,
...
...
@@ -142,7 +142,7 @@ class Migration(migrations.Migration):
(
'home'
,
models
.
CharField
(
blank
=
True
,
max_length
=
64
,
verbose_name
=
'Home'
)),
(
'uid'
,
models
.
IntegerField
(
blank
=
True
,
verbose_name
=
'Uid'
)),
(
'date_created'
,
models
.
DateTimeField
(
auto_now
=
True
,
null
=
True
)),
(
'create_by'
,
models
.
CharField
(
blank
=
True
,
max_length
=
32
,
verbose_name
=
'Created by'
)),
(
'create
d
_by'
,
models
.
CharField
(
blank
=
True
,
max_length
=
32
,
verbose_name
=
'Created by'
)),
(
'comment'
,
models
.
CharField
(
blank
=
True
,
max_length
=
128
,
verbose_name
=
'Comment'
)),
],
options
=
{
...
...
This diff is collapsed.
Click to expand it.
apps/assets/models.py
View file @
409fac3e
...
...
@@ -68,15 +68,15 @@ class AssetExtend(models.Model):
class
AdminUser
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
128
,
unique
=
True
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Name'
))
username
=
models
.
CharField
(
max_length
=
16
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Username'
))
_password
=
models
.
CharField
(
max_length
=
256
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Password'
))
_private_key
=
models
.
CharField
(
max_length
=
4096
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'SSH private key'
))
_public_key
=
models
.
CharField
(
max_length
=
4096
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'SSH public key'
))
as_default
=
models
.
BooleanField
(
default
=
Tru
e
,
verbose_name
=
_
(
'As default'
))
name
=
models
.
CharField
(
max_length
=
128
,
unique
=
True
,
verbose_name
=
_
(
'Name'
))
username
=
models
.
CharField
(
max_length
=
16
,
verbose_name
=
_
(
'Username'
))
_password
=
models
.
CharField
(
max_length
=
256
,
blank
=
True
,
verbose_name
=
_
(
'Password'
))
_private_key
=
models
.
CharField
(
max_length
=
4096
,
blank
=
True
,
verbose_name
=
_
(
'SSH private key'
))
_public_key
=
models
.
CharField
(
max_length
=
4096
,
blank
=
True
,
verbose_name
=
_
(
'SSH public key'
))
as_default
=
models
.
BooleanField
(
default
=
Fals
e
,
verbose_name
=
_
(
'As default'
))
comment
=
models
.
TextField
(
blank
=
True
,
verbose_name
=
_
(
'Comment'
))
date_created
=
models
.
DateTimeField
(
auto_now
=
True
,
null
=
True
,
blank
=
True
)
created_by
=
models
.
CharField
(
max_length
=
32
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Created by'
))
date_created
=
models
.
DateTimeField
(
auto_now
=
True
,
null
=
True
)
created_by
=
models
.
CharField
(
max_length
=
32
,
null
=
True
,
verbose_name
=
_
(
'Created by'
))
def
__unicode__
(
self
):
return
self
.
name
...
...
@@ -110,7 +110,7 @@ class AdminUser(models.Model):
@classmethod
def
generate_fake
(
cls
,
count
=
100
):
from
random
import
seed
,
choice
from
random
import
seed
import
forgery_py
from
django.db
import
IntegrityError
...
...
@@ -204,10 +204,11 @@ class Asset(models.Model):
groups
=
models
.
ManyToManyField
(
AssetGroup
,
related_name
=
'assets'
,
verbose_name
=
_
(
'Asset groups'
))
username
=
models
.
CharField
(
max_length
=
16
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Admin user'
))
password
=
models
.
CharField
(
max_length
=
256
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
"Admin password"
))
admin_user
=
models
.
ForeignKey
(
AdminUser
,
null
=
True
,
on_delete
=
models
.
SET_NULL
,
verbose_name
=
_
(
"Admin user"
))
admin_user
=
models
.
ForeignKey
(
AdminUser
,
null
=
True
,
related_name
=
'assets'
,
on_delete
=
models
.
SET_NULL
,
verbose_name
=
_
(
"Admin user"
))
system_user
=
models
.
ManyToManyField
(
SystemUser
,
blank
=
True
,
verbose_name
=
_
(
"System User"
))
idc
=
models
.
ForeignKey
(
IDC
,
null
=
True
,
related_name
=
'assets'
,
on_delete
=
models
.
SET_NULL
,
verbose_name
=
_
(
'IDC'
))
mac_addr
=
models
.
CharField
(
max_length
=
20
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
"Mac address"
))
mac_addr
ess
=
models
.
CharField
(
max_length
=
20
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
"Mac address"
))
brand
=
models
.
CharField
(
max_length
=
64
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Brand'
))
cpu
=
models
.
CharField
(
max_length
=
64
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'CPU'
))
memory
=
models
.
CharField
(
max_length
=
128
,
null
=
True
,
blank
=
True
,
verbose_name
=
_
(
'Memory'
))
...
...
This diff is collapsed.
Click to expand it.
apps/assets/templates/assets/admin_user_create_update.html
0 → 100644
View file @
409fac3e
{% extends 'base.html' %}
{% load i18n %}
{% load static %}
{% load bootstrap %}
{% block custom_head_css_js %}
<link
href=
"{% static "
css
/
plugins
/
select2
/
select2
.
min
.
css
"
%}"
rel=
"stylesheet"
>
<script
src=
"{% static "
js
/
plugins
/
select2
/
select2
.
full
.
min
.
js
"
%}"
></script>
{% endblock %}
{% block content %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-sm-12"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
{% trans 'Create asset group' %}
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
enctype=
"multipart/form-data"
method=
"post"
class=
"form-horizontal"
action=
""
>
{% csrf_token %}
{{ form.name|bootstrap_horizontal }}
{{ form.username|bootstrap_horizontal }}
{{ form.password|bootstrap_horizontal }}
{{ form.private_key_file|bootstrap_horizontal }}
<div
class=
"form-group"
>
<label
for=
"{{ form.as_default.id_for_label }}"
class=
"col-sm-2 control-label"
>
{% trans 'As default' %}
</label>
<div
class=
"col-sm-8"
>
{{ form.as_default}}
</div>
</div>
{{ form.assets|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }}
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
{% trans 'Reset' %}
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
{% trans 'Submit' %}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block custom_foot_js %}
<script>
$
(
document
).
ready
(
function
()
{
$
(
'.select2'
).
select2
();
})
</script>
{% endblock %}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
apps/assets/templates/assets/admin_user_detail.html
0 → 100644
View file @
409fac3e
This diff is collapsed.
Click to expand it.
apps/assets/templates/assets/admin_user_list.html
View file @
409fac3e
...
...
@@ -20,7 +20,7 @@
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ admin_user.id }}
</td>
<td>
<a
href=
"{% url '
users:user-detail' pk=
user.id %}"
>
<a
href=
"{% url '
assets:admin-user-detail' pk=admin_
user.id %}"
>
{{ admin_user.name }}
</a>
</td>
...
...
This diff is collapsed.
Click to expand it.
apps/assets/templates/assets/asset_group_detail.html
View file @
409fac3e
...
...
@@ -69,7 +69,7 @@
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<span>
{% trans 'Asset list of ' %}
<b>
{{ asset_group.name }}
</b></span>
<span
style=
"float: left"
></span
>
{% trans 'Asset list of ' %}
<b>
{{ asset_group.name }}
</b></span>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
...
...
@@ -118,7 +118,7 @@
<div
class=
"col-sm-5"
style=
"padding-left: 0;padding-right: 0"
>
<div
class=
"panel panel-primary"
>
<div
class=
"panel-heading"
>
<i
class=
"fa fa-info-circle"
></i>
{% trans 'Associate
asset user(system/admin)
' %}
<i
class=
"fa fa-info-circle"
></i>
{% trans 'Associate
system user
' %}
</div>
<div
class=
"panel-body"
>
<table
class=
"table"
>
...
...
@@ -207,23 +207,23 @@
{% endblock %}
{% block custom_foot_js %}
<script>
function
switch_user_status
(
obj
)
{
var
status
=
$
(
obj
).
prop
(
'checked'
);
$
.
ajax
({
url
:
"{% url 'users:user-active-api' pk=user.id %}"
,
type
:
"PUT"
,
data
:
{
'is_active'
:
status
},
success
:
function
(
data
,
status
)
{
console
.
log
(
data
)
},
error
:
function
()
{
console
.
log
(
'error'
)
}
})
}
{
#
function
switch_user_status
(
obj
)
{
#
}
{
#
var
status
=
$
(
obj
).
prop
(
'checked'
);
#
}
{
##
}
{
#
$
.
ajax
({
#
}
{
#
url
:
"{% url 'users:user-active-api' pk=user.id %}"
,
#
}
{
#
type
:
"PUT"
,
#
}
{
#
data
:
{
#
}
{
#
'is_active'
:
status
#
}
{
#
},
#
}
{
#
success
:
function
(
data
,
status
)
{
#
}
{
#
console
.
log
(
data
)
#
}
{
#
},
#
}
{
#
error
:
function
()
{
#
}
{
#
console
.
log
(
'error'
)
#
}
{
#
}
#
}
{
#
})
#
}
{
#
}
#
}
$
(
document
).
ready
(
function
()
{
$
(
'.select2'
).
select2
();
})
...
...
This diff is collapsed.
Click to expand it.
apps/assets/views.py
View file @
409fac3e
...
...
@@ -2,19 +2,16 @@
from
__future__
import
absolute_import
,
unicode_literals
from
django.utils.translation
import
ugettext
as
_
from
django.shortcuts
import
get_object_or_404
from
django.views.generic
import
TemplateView
,
ListView
from
django.urls
import
reverse_lazy
from
django.views.generic.edit
import
CreateView
,
DeleteView
,
FormView
,
UpdateView
from
django.conf
import
settings
from
django.db.models
import
Q
from
django.views.generic
import
TemplateView
,
ListView
from
django.views.generic.edit
import
CreateView
,
DeleteView
,
FormView
,
UpdateView
from
django.urls
import
reverse_lazy
from
django.contrib.messages.views
import
SuccessMessageMixin
from
django.views.generic.detail
import
DetailView
,
SingleObjectMixin
from
.models
import
Asset
,
AssetGroup
,
IDC
,
AssetExtend
,
AdminUser
,
SystemUser
from
.forms
import
AssetForm
,
AssetGroupForm
,
IDCForm
from
.forms
import
AssetForm
,
AssetGroupForm
,
IDCForm
,
AdminUserForm
from
.hands
import
AdminUserRequiredMixin
...
...
@@ -216,7 +213,7 @@ class AdminUserListView(AdminUserRequiredMixin, ListView):
return
super
(
AdminUserListView
,
self
)
.
get_context_data
(
**
kwargs
)
def
get_queryset
(
self
):
# Todo: Default
group
by lose asset connection num
# Todo: Default
order
by lose asset connection num
self
.
queryset
=
super
(
AdminUserListView
,
self
)
.
get_queryset
()
self
.
keyword
=
keyword
=
self
.
request
.
GET
.
get
(
'keyword'
,
''
)
self
.
sort
=
sort
=
self
.
request
.
GET
.
get
(
'sort'
,
'-date_created'
)
...
...
@@ -230,17 +227,69 @@ class AdminUserListView(AdminUserRequiredMixin, ListView):
return
self
.
queryset
class
AdminUserCreateView
(
AdminUserRequiredMixin
,
CreateView
):
pass
class
AdminUserCreateView
(
AdminUserRequiredMixin
,
SuccessMessageMixin
,
CreateView
):
model
=
AdminUser
form_class
=
AdminUserForm
template_name
=
'assets/admin_user_create_update.html'
success_url
=
reverse_lazy
(
'assets:admin-user-list'
)
success_message
=
_
(
'Create admin user <a href="
%
s">
%
s</a> successfully.'
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
'assets'
,
'action'
:
'Create admin user'
}
kwargs
.
update
(
context
)
return
super
(
AdminUserCreateView
,
self
)
.
get_context_data
(
**
kwargs
)
def
get_success_message
(
self
,
cleaned_data
):
return
self
.
success_message
%
(
reverse_lazy
(
'assets:admin-user-detail'
,
kwargs
=
{
'pk'
:
self
.
object
.
pk
}),
self
.
object
.
name
,
)
class
AdminUserUpdateView
(
AdminUserRequiredMixin
,
UpdateView
):
pass
model
=
AdminUser
form_class
=
AdminUserForm
template_name
=
'assets/admin_user_create_update.html'
success_message
=
_
(
'Update admin user <a href="
%
s">
%
s</a> successfully.'
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
'assets'
,
'action'
:
'Update admin user'
}
kwargs
.
update
(
context
)
return
super
(
AdminUserUpdateView
,
self
)
.
get_context_data
(
**
kwargs
)
class
AdminUserDetailView
(
AdminUserRequiredMixin
,
DetailView
):
pass
def
get_success_url
(
self
):
success_url
=
reverse_lazy
(
'assets:admin-user-detail'
,
pk
=
self
.
object
.
pk
)
return
success_url
class
AdminUserDetailView
(
AdminUserRequiredMixin
,
SingleObjectMixin
,
ListView
):
paginate_by
=
settings
.
CONFIG
.
DISPLAY_PER_PAGE
template_name
=
'assets/admin_user_detail.html'
context_object_name
=
'admin_user'
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
object
=
self
.
get_object
(
queryset
=
AdminUser
.
objects
.
all
())
return
super
(
AdminUserDetailView
,
self
)
.
get
(
request
,
*
args
,
**
kwargs
)
def
get_queryset
(
self
):
return
self
.
object
.
assets
.
all
()
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
'assets'
,
'action'
:
'Admin user detail'
}
kwargs
.
update
(
context
)
return
super
(
AdminUserDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
class
AdminUserDeleteView
(
AdminUserRequiredMixin
,
DeleteView
):
pass
model
=
AdminUser
template_name
=
'assets/delete_confirm.html'
success_url
=
'assets:admin-user-list'
This diff is collapsed.
Click to expand it.
apps/fixtures/fake.json
View file @
409fac3e
This source diff could not be displayed because it is too large. You can
view the blob
instead.
This diff is collapsed.
Click to expand it.
apps/users/templates/users/user_detail.html
View file @
409fac3e
...
...
@@ -108,7 +108,7 @@
<div
class=
"col-sm-5"
style=
"padding-left: 0;padding-right: 0"
>
<div
class=
"panel panel-primary"
>
<div
class=
"panel-heading"
>
<i
class=
"fa fa-info-circle"
></i>
{% trans 'Quick
modify
' %}
<i
class=
"fa fa-info-circle"
></i>
{% trans 'Quick
update
' %}
</div>
<div
class=
"panel-body"
>
<table
class=
"table"
>
...
...
@@ -191,7 +191,7 @@
<tr>
<td
><b
class=
"bdg_user_group"
data-gid=
{{
group
.
id
}}
>
{{ group.name }}
</b></td>
<td>
<button
class=
"btn btn-danger btn-
sm
btn_delete_user_group"
type=
"button"
style=
"float: right;"
><i
class=
"fa fa-minus"
></i></button>
<button
class=
"btn btn-danger btn-
xs
btn_delete_user_group"
type=
"button"
style=
"float: right;"
><i
class=
"fa fa-minus"
></i></button>
</td>
</tr>
{% endfor %}
...
...
This diff is collapsed.
Click to expand it.
apps/users/urls.py
View file @
409fac3e
...
...
@@ -16,7 +16,6 @@ urlpatterns = [
name
=
'reset-password-success'
),
url
(
r'^user$'
,
views
.
UserListView
.
as_view
(),
name
=
'user-list'
),
url
(
r'^user/(?P<pk>[0-9]+)$'
,
views
.
UserDetailView
.
as_view
(),
name
=
'user-detail'
),
url
(
r'^user/(?P<pk>[0-9]+)/assets-perm$'
,
views
.
UserDetailView
.
as_view
(),
name
=
'user-detail'
),
url
(
r'^user/create$'
,
views
.
UserCreateView
.
as_view
(),
name
=
'user-create'
),
url
(
r'^user/(?P<pk>[0-9]+)/update$'
,
views
.
UserUpdateView
.
as_view
(),
name
=
'user-update'
),
url
(
r'^user/(?P<pk>[0-9]+)/delete$'
,
views
.
UserDeleteView
.
as_view
(),
name
=
'user-delete'
),
...
...
This diff is collapsed.
Click to expand it.
apps/users/views.py
View file @
409fac3e
...
...
@@ -103,7 +103,7 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
form_class
=
UserCreateForm
template_name
=
'users/user_create.html'
success_url
=
reverse_lazy
(
'users:user-list'
)
success_message
=
_
(
'Create user <a href="
%
s">
%
s</a> success.'
)
success_message
=
_
(
'Create user <a href="
%
s">
%
s</a> success
fully
.'
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
UserCreateView
,
self
)
.
get_context_data
(
**
kwargs
)
...
...
This diff is collapsed.
Click to expand it.
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