HttpResponse. Как правильно его использовать?

-3

все. Я новичок в Django, и у меня есть вопрос. Я хочу узнать, что мне нужно, вернуться к запросу ajax get/post. У меня есть пример, но я знаю, что это не хорошо. Можете ли вы, пожалуйста, объяснить мне ответы? Когда, что и почему? Я не нашел никакой информации об этом.

Когда я нажимаю кнопку, объект удаляется из базы данных.

Это мой запрос ajax:

function removeProduct(){
    $('.btn-remove').click(function(e){
        e.preventDefault();
        var data = {};
        data["csrfmiddlewaretoken"] = $('#quantity_goods [name="csrfmiddlewaretoken"]').val();
        var product = $(this);
        data.product_id = product.data("product_id");
        var url = product.attr("action");

        $.ajax({
            url: url,
            type: 'POST',
            data: data,
            cache: true,
            success: location.reload(),
        });
    });
}

Это мое мнение:

def remove_product(request):
    """Remove product from basket."""
    data = request.POST
    product_id = data.get('product_id')

    product = ProductInOrder.objects.filter(id=product_id)
    product.delete()

    return HttpResponse()
  • 0
    Что вы хотите, чтобы remove_product сообщал обратно вашему сценарию? Ваш текущий код работает нормально. Если вы получили 200 кодов состояния, удаление работало нормально.
  • 0
    Единственная проблема, которую я вижу здесь, в коде JS, где вы безоговорочно вызываете location.reload() еще до того, как у Ajax был шанс запустить. Вы должны обернуть это в функцию.
Теги:
django-views
httpresponse

1 ответ

0
Лучший ответ

Вот как я это делаю

var username_ok = false;
var email_ok = false;

/*CSRF Code */

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
function sameOrigin(url) {
    // test that a given url is a same-origin URL
    // url could be relative or scheme relative or absolute
    var host = document.location.host; // host + port
    var protocol = document.location.protocol;
    var sr_origin = '//' + host;
    var origin = protocol + sr_origin;
    // Allow absolute or scheme relative URLs to same origin
    return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
        (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
        // or any other URL that isn't scheme relative or absolute i.e relative.
        !(/^(\/\/|http:|https:).*/.test(url));
}

/* End CSRF Code */

$(function() {

    $('#username, #email').focus(function() {
        var value = $(this).val();

        if (value == 'required') {
            $(this).val(null);
        }
    });

    $('#username').change(function() {
        var username = $(this).val();
        var data = {'username': username};

        var csrftoken = $.cookie('csrftoken');

        $.ajax({
            url: "/ajax_username",
            type: "POST",
            dataType: 'json',
            beforeSend: function(xhr, settings) {
                if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
                    // Send the token to same-origin, relative URLs only.
                    // Send the token only if the method warrants CSRF protection
                    // Using the CSRFToken value acquired earlier
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
                }

            },
            data: JSON.stringify(data),
            success: function(response){
                if (response['status'] == 'ok') {
                    if (response['exists'] == true) {
                        $('.username-exists').removeClass('hidden');
                        username_ok = false;
                    } else {
                        $('.username-exists').addClass('hidden');
                        username_ok = true;
                    }
                }   
            }


            });

        /* End Ajax Call */
    });

бэкенд

import json

def username_ajax(request):
    response = {'status': None}

    if request.method == 'POST':
        data = json.loads(request.body)
        username = data['username']

        response['exists'] = bool( User.objects.filter(username=username))
        response['status'] = 'ok'
    else:
        response['error'] = 'no post data found'

    return HttpResponse(
            json.dumps(response),
            content_type="application/json"
        )

Надеюсь, поможет

  • 0
    также этот jquery.cookie.min.js модуль jquery позволяет импортировать его, чтобы вы могли читать куки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню