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
63a502ba
Commit
63a502ba
authored
Jul 11, 2019
by
八千流
Committed by
BaiJiangJie
Jul 11, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 创建/更新 用户 使用api (#2918)
* [Update] 创建/更新 用户 使用api * [Update] 修改小问题 * [Update] 修改小问题
parent
e0d492f5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
98 additions
and
60 deletions
+98
-60
v1.py
apps/users/serializers/v1.py
+9
-5
user_create.html
apps/users/templates/users/user_create.html
+23
-7
user_update.html
apps/users/templates/users/user_update.html
+66
-48
No files found.
apps/users/serializers/v1.py
View file @
63a502ba
...
...
@@ -36,7 +36,7 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer):
'date_password_last_updated'
,
'date_expired'
,
'avatar_url'
,
]
extra_kwargs
=
{
'password'
:
{
'write_only'
:
True
,
'required'
:
False
},
'password'
:
{
'write_only'
:
True
,
'required'
:
False
,
'allow_null'
:
True
,
'allow_blank'
:
True
},
'public_key'
:
{
'write_only'
:
True
},
'groups_display'
:
{
'label'
:
_
(
'Groups name'
)},
'source_display'
:
{
'label'
:
_
(
'Source name'
)},
...
...
@@ -56,13 +56,17 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer):
raise
serializers
.
ValidationError
(
msg
)
return
value
@staticmethod
def
validate_password
(
value
):
def
validate_password
(
self
,
password
):
from
..utils
import
check_password_rules
if
not
check_password_rules
(
value
):
password_strategy
=
self
.
initial_data
.
get
(
'password_strategy'
)
if
password_strategy
==
'0'
:
return
if
password_strategy
is
None
and
not
password
:
return
if
not
check_password_rules
(
password
):
msg
=
_
(
'Password does not match security rules'
)
raise
serializers
.
ValidationError
(
msg
)
return
value
return
password
@staticmethod
def
change_password_to_raw
(
validated_data
):
...
...
apps/users/templates/users/user_create.html
View file @
63a502ba
...
...
@@ -4,9 +4,7 @@
{% block user_template_title %}{% trans "Create user" %}{% endblock %}
{% block password %}
{% bootstrap_field form.password_strategy layout="horizontal" %}
<div
class=
"form-group"
id=
"custom_password"
>
{% bootstrap_field form.password layout="horizontal" %}
</div>
{% bootstrap_field form.password layout="horizontal" %}
{# 密码popover #}
<div
id=
"container"
>
<div
class=
"popover fade bottom in"
role=
"tooltip"
id=
"popover777"
style=
" display: none; width:260px;"
>
...
...
@@ -29,7 +27,7 @@ function passwordCheck() {
progress
=
$
(
'#id_progress'
),
password_check_rules
=
{{
password_check_rules
|
safe
}},
minLength
=
6
,
top
=
idPassword
.
offset
().
top
-
$
(
'.navbar'
).
outerHeight
(
true
)
-
$
(
'.page-heading'
).
outerHeight
(
true
)
-
10
+
34
,
top
=
idPassword
.
offset
().
top
-
$
(
'.navbar'
).
outerHeight
(
true
)
-
$
(
'.page-heading'
).
outerHeight
(
true
)
-
77
+
34
,
left
=
377
,
i18n_fallback
=
{
"veryWeak"
:
"{% trans 'Very weak' %}"
,
...
...
@@ -67,9 +65,9 @@ var password_strategy_radio_input = 'input[type=radio][name=password_strategy]';
function
passwordStrategyFieldsDisplay
(){
var
val
=
$
(
'input:radio[name="password_strategy"]:checked'
).
val
();
if
(
val
===
'0'
){
$
(
'#
custom_password
'
).
addClass
(
'hidden'
)
$
(
'#
id_password'
).
parents
(
'.form-group
'
).
addClass
(
'hidden'
)
}
else
{
$
(
'#
custom_password
'
).
removeClass
(
'hidden'
)
$
(
'#
id_password'
).
parents
(
'.form-group
'
).
removeClass
(
'hidden'
)
}
}
$
(
document
).
ready
(
function
()
{
...
...
@@ -78,7 +76,25 @@ $(document).ready(function () {
}).
on
(
'change'
,
password_strategy_radio_input
,
function
(){
passwordStrategyFieldsDisplay
()
})
})
.
on
(
"submit"
,
"form"
,
function
(
evt
)
{
evt
.
preventDefault
();
var
the_url
=
'{% url '
api
-
users
:
user
-
list
' %}'
;
var
redirect_to
=
'{% url "users:user-list" %}'
;
var
method
=
"POST"
;
var
form
=
$
(
"form"
);
var
data
=
form
.
serializeObject
();
objectAttrsIsList
(
data
,
[
'groups'
]);
objectAttrsIsDatetime
(
data
,[
'date_expired'
]);
var
props
=
{
url
:
the_url
,
data
:
data
,
method
:
method
,
form
:
form
,
redirect_to
:
redirect_to
};
formSubmit
(
props
);
})
</script>
{% endblock %}
apps/users/templates/users/user_update.html
View file @
63a502ba
...
...
@@ -29,58 +29,76 @@
{% block custom_foot_js %}
{{ block.super }}
<script>
function
passwordCheck
()
{
if
(
$
(
'#id_password'
).
length
!=
1
)
{
return
}
var
el
=
$
(
'#id_password_rules'
),
idPassword
=
$
(
'#id_password'
),
idPopover
=
$
(
'#popover777'
),
container
=
$
(
'#container'
),
progress
=
$
(
'#id_progress'
),
password_check_rules
=
{{
password_check_rules
|
safe
}},
minLength
=
6
,
top
=
idPassword
.
offset
().
top
-
$
(
'.navbar'
).
outerHeight
(
true
)
-
$
(
'.page-heading'
).
outerHeight
(
true
)
-
10
+
34
,
left
=
377
,
i18n_fallback
=
{
"veryWeak"
:
"{% trans 'Very weak' %}"
,
"weak"
:
"{% trans 'Weak' %}"
,
"normal"
:
"{% trans 'Normal' %}"
,
"medium"
:
"{% trans 'Medium' %}"
,
"strong"
:
"{% trans 'Strong' %}"
,
"veryStrong"
:
"{% trans 'Very strong' %}"
};
function
passwordCheck
()
{
if
(
$
(
'#id_password'
).
length
!=
1
)
{
return
}
var
el
=
$
(
'#id_password_rules'
),
idPassword
=
$
(
'#id_password'
),
idPopover
=
$
(
'#popover777'
),
container
=
$
(
'#container'
),
progress
=
$
(
'#id_progress'
),
password_check_rules
=
{{
password_check_rules
|
safe
}},
minLength
=
6
,
top
=
idPassword
.
offset
().
top
-
$
(
'.navbar'
).
outerHeight
(
true
)
-
$
(
'.page-heading'
).
outerHeight
(
true
)
-
10
+
34
,
left
=
377
,
i18n_fallback
=
{
"veryWeak"
:
"{% trans 'Very weak' %}"
,
"weak"
:
"{% trans 'Weak' %}"
,
"normal"
:
"{% trans 'Normal' %}"
,
"medium"
:
"{% trans 'Medium' %}"
,
"strong"
:
"{% trans 'Strong' %}"
,
"veryStrong"
:
"{% trans 'Very strong' %}"
};
$
.
each
(
password_check_rules
,
function
(
idx
,
rules
)
{
if
(
rules
.
key
===
'id_security_password_min_length'
){
minLength
=
rules
.
value
}
});
$
.
each
(
password_check_rules
,
function
(
idx
,
rules
)
{
if
(
rules
.
key
===
'id_security_password_min_length'
){
minLength
=
rules
.
value
}
});
// 初始化popover
initPopover
(
container
,
progress
,
idPassword
,
el
,
password_check_rules
,
i18n_fallback
);
// 初始化popover
initPopover
(
container
,
progress
,
idPassword
,
el
,
password_check_rules
,
i18n_fallback
);
// 监听事件
idPassword
.
on
(
'focus'
,
function
()
{
idPopover
.
css
(
'top'
,
top
);
idPopover
.
css
(
'left'
,
left
);
idPopover
.
css
(
'display'
,
'block'
);
});
idPassword
.
on
(
'blur'
,
function
()
{
idPopover
.
css
(
'display'
,
'none'
);
});
idPassword
.
on
(
'keyup'
,
function
(){
var
password
=
idPassword
.
val
();
checkPasswordRules
(
password
,
minLength
);
});
}
$
(
document
).
ready
(
function
(){
passwordCheck
();
// 监听事件
idPassword
.
on
(
'focus'
,
function
()
{
idPopover
.
css
(
'top'
,
top
);
idPopover
.
css
(
'left'
,
left
);
idPopover
.
css
(
'display'
,
'block'
);
});
idPassword
.
on
(
'blur'
,
function
()
{
idPopover
.
css
(
'display'
,
'none'
);
});
idPassword
.
on
(
'keyup'
,
function
(){
var
password
=
idPassword
.
val
();
checkPasswordRules
(
password
,
minLength
);
});
}
$
(
document
).
ready
(
function
(){
passwordCheck
();
var
origin_text
=
$
(
"#password_help_text"
).
text
();
var
new_text
=
origin_text
.
replace
(
'{}'
,
"{{ object.source_display }}"
);
$
(
"#password_help_text"
).
html
(
new_text
);
var
origin_text
=
$
(
"#password_help_text"
).
text
();
var
new_text
=
origin_text
.
replace
(
'{}'
,
"{{ object.source_display }}"
);
$
(
"#password_help_text"
).
html
(
new_text
);
})
})
.
on
(
"submit"
,
"form"
,
function
(
evt
)
{
evt
.
preventDefault
();
var
the_url
=
'{% url '
api
-
users
:
user
-
detail
' pk=object.id %}'
;
var
redirect_to
=
'{% url "users:user-list" %}'
;
var
method
=
"PUT"
;
var
form
=
$
(
"form"
);
var
data
=
form
.
serializeObject
();
objectAttrsIsList
(
data
,
[
'groups'
]);
objectAttrsIsDatetime
(
data
,[
'date_expired'
]);
var
props
=
{
url
:
the_url
,
data
:
data
,
method
:
method
,
form
:
form
,
redirect_to
:
redirect_to
};
formSubmit
(
props
);
})
</script>
{% endblock %}
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