Обработка представлений форм django с помощью ajax
Я ищу более элегантный способ решения этой проблемы. Допустим, у меня есть две кнопки x, y в main.html:
<input class= "btn-check", name = "options", id="x">
<label class="btn btn-lg btn-info", for="x">x</label>
<input class= "btn-check", name = "options", id="y">
<label class="btn btn-lg btn-success", for="y">y</label>
После нажатия на кнопку я хочу сделать кое-что в python, и поэтому в django views я создам функцию представления для каждой из кнопок (моя текущая реализация):
def funcX(request):
booleanX = doSomethingforX()
return JsonResponse({"success": booleanX})
def funcY(request):
booleanY = doSomethingforY()
return JsonResponse({"success": booleanY})
а вызовы ajax будут следующими:
$("[id='x']").on("click", function(e){
e.preventDefault();
$.ajax({
type:"GET",
url: "{% url 'funcX' %}",
success: function(response){
if(response.success == true){
//Do something
}
}
})
});
Вызов ajax будет таким же для кнопки Y.
Теперь мне интересно, можно ли сделать это с формами? Скажем, html становится:
<form method="POST", class="form-group", id="post-form">
<input type="submit", value="x", class= "btn-check", name = "options", id="x">
<label class="btn btn-lg btn-info", for="x">x</label>
<input type="submit", value="y", class= "btn-check", name = "options", id="y">
<label class="btn btn-lg btn-success", for="y">y</label>
</form>
Затем в django views у меня есть представление для main.html. Таким образом, это экономит много представлений, написанных на django.
def main(request):
if request.method == "POST" and request.POST["options"] == "x":
booleanX = doSomethingforX()
return JsonResponse({"success": booleanX})
if request.method == "POST" and request.POST["options"] == "y":
booleanY = doSomethingforY()
return JsonResponse({"success": booleanY)})
return render(request, "main.html")
Теперь проблема в том, что я не знаю, как написать вызовы ajax для получения от views и получения JsonResponse возврата для X и Y соответственно...
Есть идеи?
HTML
<form method="POST", class="form-group", id="post-form">
{% csrf_token %}
<input type="text" class= "btn-check" name = "options" id="options_input">
<button type="submit" id="x">X</button>
<button type="submit" id="y">Y</button>
</form>
JS
$('#x').click(function(){
$('#options_input').val("X")
})
$('#y').click(function(){
$('#options_input').val("Y")
})
$('body').on('submit','#post-form',function(e){
e.preventDefault();
var formData = new FormData(this);
$.ajax({
type:"POST",
url: "/url/",
data: formData,
success: function(response){
},
error: function (response) {
},
cache: false,
contentType: false,
processData: false
})
});
ПРОСМОТРОВ
def main(request):
if request.method == "POST":
submitted_type = request.POST.get("options")
if submitted_type == "X":
doSomethingforX()
return JsonResponse({"success": X)})
else:
doSomethingforY()
return JsonResponse({"success": Y)})