все. Я новичок в 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()
Вот как я это делаю
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"
)
Надеюсь, поможет
jquery.cookie.min.js
модуль jquery позволяет импортировать его, чтобы вы могли читать куки.
remove_product
сообщал обратно вашему сценарию? Ваш текущий код работает нормально. Если вы получили 200 кодов состояния, удаление работало нормально.location.reload()
еще до того, как у Ajax был шанс запустить. Вы должны обернуть это в функцию.