Очистить входные данные 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.

Другие вопросы по тегам