Commit 63a502ba authored by 八千流's avatar 八千流 Committed by BaiJiangJie

[Update] 创建/更新 用户 使用api (#2918)

* [Update] 创建/更新 用户 使用api

* [Update] 修改小问题

* [Update] 修改小问题
parent e0d492f5
...@@ -36,7 +36,7 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer): ...@@ -36,7 +36,7 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer):
'date_password_last_updated', 'date_expired', 'avatar_url', 'date_password_last_updated', 'date_expired', 'avatar_url',
] ]
extra_kwargs = { 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}, 'public_key': {'write_only': True},
'groups_display': {'label': _('Groups name')}, 'groups_display': {'label': _('Groups name')},
'source_display': {'label': _('Source name')}, 'source_display': {'label': _('Source name')},
...@@ -56,13 +56,17 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer): ...@@ -56,13 +56,17 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer):
raise serializers.ValidationError(msg) raise serializers.ValidationError(msg)
return value return value
@staticmethod def validate_password(self, password):
def validate_password(value):
from ..utils import check_password_rules 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') msg = _('Password does not match security rules')
raise serializers.ValidationError(msg) raise serializers.ValidationError(msg)
return value return password
@staticmethod @staticmethod
def change_password_to_raw(validated_data): def change_password_to_raw(validated_data):
......
...@@ -4,9 +4,7 @@ ...@@ -4,9 +4,7 @@
{% block user_template_title %}{% trans "Create user" %}{% endblock %} {% block user_template_title %}{% trans "Create user" %}{% endblock %}
{% block password %} {% block password %}
{% bootstrap_field form.password_strategy layout="horizontal" %} {% bootstrap_field form.password_strategy layout="horizontal" %}
<div class="form-group" id="custom_password">
{% bootstrap_field form.password layout="horizontal" %} {% bootstrap_field form.password layout="horizontal" %}
</div>
{# 密码popover #} {# 密码popover #}
<div id="container"> <div id="container">
<div class="popover fade bottom in" role="tooltip" id="popover777" style=" display: none; width:260px;"> <div class="popover fade bottom in" role="tooltip" id="popover777" style=" display: none; width:260px;">
...@@ -29,7 +27,7 @@ function passwordCheck() { ...@@ -29,7 +27,7 @@ function passwordCheck() {
progress = $('#id_progress'), progress = $('#id_progress'),
password_check_rules = {{ password_check_rules|safe }}, password_check_rules = {{ password_check_rules|safe }},
minLength = 6, 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, left = 377,
i18n_fallback = { i18n_fallback = {
"veryWeak": "{% trans 'Very weak' %}", "veryWeak": "{% trans 'Very weak' %}",
...@@ -67,9 +65,9 @@ var password_strategy_radio_input = 'input[type=radio][name=password_strategy]'; ...@@ -67,9 +65,9 @@ var password_strategy_radio_input = 'input[type=radio][name=password_strategy]';
function passwordStrategyFieldsDisplay(){ function passwordStrategyFieldsDisplay(){
var val = $('input:radio[name="password_strategy"]:checked').val(); var val = $('input:radio[name="password_strategy"]:checked').val();
if(val === '0'){ if(val === '0'){
$('#custom_password').addClass('hidden') $('#id_password').parents('.form-group').addClass('hidden')
}else { }else {
$('#custom_password').removeClass('hidden') $('#id_password').parents('.form-group').removeClass('hidden')
} }
} }
$(document).ready(function () { $(document).ready(function () {
...@@ -78,7 +76,25 @@ $(document).ready(function () { ...@@ -78,7 +76,25 @@ $(document).ready(function () {
}).on('change', password_strategy_radio_input, function(){ }).on('change', password_strategy_radio_input, function(){
passwordStrategyFieldsDisplay() 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> </script>
{% endblock %} {% endblock %}
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
{% block custom_foot_js %} {% block custom_foot_js %}
{{ block.super }} {{ block.super }}
<script> <script>
function passwordCheck() { function passwordCheck() {
if ($('#id_password').length != 1) { if ($('#id_password').length != 1) {
return return
} }
...@@ -73,14 +73,32 @@ ...@@ -73,14 +73,32 @@
var password = idPassword.val(); var password = idPassword.val();
checkPasswordRules(password, minLength); checkPasswordRules(password, minLength);
}); });
} }
$(document).ready(function(){ $(document).ready(function(){
passwordCheck(); passwordCheck();
var origin_text = $("#password_help_text").text(); var origin_text = $("#password_help_text").text();
var new_text = origin_text.replace('{}', "{{ object.source_display }}"); var new_text = origin_text.replace('{}', "{{ object.source_display }}");
$("#password_help_text").html(new_text); $("#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> </script>
{% endblock %} {% endblock %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment