Насколько безопасно использовать post-запросы через ajax?
Я делаю приложение для контроля инвентаризации на django. Все данные из базы данных берутся через ajax и api, то есть get, post и put запросы. Я использую django view only для отображения html шаблонов. Мне нужен совет, насколько безопасно использовать код, подобный этому:
function iterTable() {
let items = [];
let docDate;
let docContragent;
let docWare;
let comment;
let table = document.querySelector(".invoice-add-table table");
for (var i = 1, row; row = table.rows[i]; i++) {
if(row == document.querySelector('.add-elements')) {
break;
}
docDate = document.querySelector('input[name="invoice-date"]').value
docContragent = document.querySelector('select[name="invoice-contragent-select"]').value
docWare = document.querySelector('select[name="warehouse-select"]').value
comment = document.querySelector('textarea[name="invoice-comment"]').value
// ITEMS
let name = row.cells[1].querySelector('span').dataset.id
let quantity = row.cells[2].querySelector('input').value
let buy_price = row.cells[3].querySelector('input').value
let sell_price = row.cells[5].querySelector('input').value
items.push({
"product": name,
"buy_price": buy_price,
"sell_price": sell_price,
"quantity": quantity,
});
}
let invoice = {
"warehouse": docWare,
"date": docDate,
"comment": comment,
"contragent": docContragent,
"items": items
}
let json = JSON.stringify(invoice);
const csrftoken = Cookies.get('csrftoken');
$.ajax({
data: json,
contentType: "application/json; charset=utf-8",
type: "POST", // GET or POST
headers: {'X-CSRFToken': csrftoken},
url: "http://127.0.0.1:8000/warehouse/api/notes/",
success: function (response) {
alert('ok')
},
error: function (response) {
console.log(response.responseJSON.errors)
}
});
return false;
}
document.querySelector('span[name="note-submit-btn"]').addEventListener("click", iterTable);
serialisers.py
def create(self, validated_data):
last_num = ConsignmentNote.objects.filter(warehouse__company=self.context['request'].user.company).latest('id')
items = validated_data.pop('items')
note = ConsignmentNote.objects.create(**validated_data, doc_type = 1, number = last_num.number + 1)
for item in items:
product = item.pop('product')
item = ConsignmentItem.objects.create(consignmentnote=note, product=product ,**item)
return note
def update(self, instance, validated_data):
instance.date = validated_data.pop('date', instance.date)
instance.comment = validated_data.pop('comment', instance.comment)
instance.save()
items_ids = [item['product'] for item in validated_data['items']]
for page in instance.items.all():
if page not in items_ids:
page.delete()
for item in validated_data['items']:
page = ConsignmentItem( product=item['product'], quantity=item['quantity'], buy_price=item['buy_price'], sell_price=item['sell_price'], consignmentnote=instance)
page.save()
return instance
Поскольку данные отправляются непосредственно в api (в функцию create в сериализаторе), я не использую form.is_valid()
(хорошая ли это идея), все проверки ограничиваются проверкой базы данных на совпадение полей (charfield
, integerfield
и т.д.)
Спасибо за любой совет