Очистить входные данные textarea от jQuery
У меня есть проблема в Django: я отправляю форму через функцию jQuery post, но я не могу найти способ дезинфицировать входные данные.
Это HTML:
<form id="create-comment" name="new_comment_form" action="/topic/new-comment/save/" method="POST" novalidate="novalidate" class="fv-form fv-form-bootstrap"><button type="submit" class="fv-hidden-submit" style="display: none; width: 0px; height: 0px;"></button><input type="hidden" name="csrfmiddlewaretoken" value="5jGzvHg4hdD1nnW1L8MzKNtTt2Kdro6L">
<div class="form-group has-feedback">
<label for="comment_content">Comment</label>
<textarea class="form-control" id="comment_content" rows="3" name="comment_content" placeholder="Enter content" data-fv-field="comment_content"></textarea><i class="form-control-feedback" data-fv-icon-for="comment_content" style="display: none;"></i>
<input name="topic_target" type="hidden" value="2">
<small class="help-block" data-fv-validator="notEmpty" data-fv-for="comment_content" data-fv-result="NOT_VALIDATED" style="display: none;">Comment content is required</small><small class="help-block" data-fv-validator="stringLength" data-fv-for="comment_content" data-fv-result="NOT_VALIDATED" style="display: none;">Please write at least 10 characters</small></div>
<div class="form-group">
<button id="create-comment-btn" type="submit" class="btn btn-success">Post Comment</button>
</div>
</form>
Это мнение:
def save_comment(request):
if not request.is_ajax():
raise Http404
result = {}
topic_id = request.POST['topic_target']
topic_related = Topic.objects.get(pk=topic_id)
user = CustomUser.objects.get(user=request.user)
comment = request.POST['comment_content']
try:
new_comment = Comments(topic=topic_related, comment_content= comment, date_created=timezone.now(), author=user)
new_comment.save()
"""
Generates and returns HTML markup for the new posted comment
"""
formatted_markup = get_comment_markup(new_comment)
result = {'result' : 'ok', 'markup' : formatted_markup }
except ObjectDoesNotExist:
result={'result' : 'Something went wrong, this is embarrassing...please try again'}
finally:
json_result = json.dumps(result)
return HttpResponse(json_result, content_type='application/json')
и это JQuery:
$('#create-comment').formValidation({
framework: 'bootstrap',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
comment_content: {
validators: {
notEmpty: {
message: 'Comment content is required'
},
stringLength: {
min: 10,
max: 200,
message: 'Please write at least 10 characters'
}
}
}
}
})
.on('success.form.fv', function(e){
e.preventDefault();
var $form =$(e.target),
fv =$(e.target).data('formValidation');
$.post($form.attr('action'), $form.serialize())
.done(function(data){
$('#pagination-low').before(data['markup']);
fv.resetField('comment_content', true);
return false;
})
.fail(function(xhr, status, error){
alert(error);
});
});
Поле формы корректно проверяется с помощью formValidation и сохраняется, но значение не экранируется и не очищается, поэтому, если я напишу сценарий, он будет запущен при визуализации комментария.
Есть идеи, как избежать этого? Я уже использую {% autoescape on %} в этой части шаблона.
1 ответ
Вы должны использовать форму Django в вашем представлении, которая позволит вам написать clean_comment_content
метод, который дезинфицирует HTML.