Django: быстрее или лучше использовать Ajax или встроенные методы для отправки данных? - PullRequest
0 голосов
/ 21 марта 2020

У меня есть вопрос относительно отправки данных из шаблона на сервер с использованием Ajax или встроенных Django методов. Рассмотрим следующий пример:

Что я имею в виду под Django Методы:

views.py:

def block_user(request, lobby):
    target_id = util.get_other_user(Chat.objects.get(lobby=lobby), request.user).id
    request.user.profile.block(User.objects.get(id=target_id))

    return HttpResponseRedirect(reverse('chat-explicit', kwargs={'lobby': lobby}))

шаблон:

<button type="button" class="btn btn-danger" id="block-user-btn" onclick="location.href='{% url 'user-block' chatroom.lobby %}';">Block</button>

Что я имею в виду, используя Ajax:

views.py:

def block_user(request):
    lobby = request.POST.get("lobby", None)
    target_id = util.get_other_user(Chat.objects.get(lobby=lobby), request.user).id
    request.user.profile.block(User.objects.get(id=target_id))
    return HttpResponse('')

шаблон:

<button type="button" class="btn btn-danger" id="block-user-btn">Block</button>
<script>
           $("#block-user-btn").click(function() {
        $.ajax({
            headers: { "X-CSRFToken": getCookie("csrftoken") },
            url: "{% url 'block-user' %}",
            data: {
                'lobby': '{{ lobby }}'
            },
            type: 'post',
            dataType: 'json',
            async: false,
            success: function(data) {
                location.reload();
            },
            failure: function(data) {
                console.log("error");
            }
        });
    });
   </script>

Оба методы работают, но какой из них быстрее? или какой из них лучше использовать?

1) В этом случае ответ сервера просто говорит javascript перезагрузить страницу. Рассматривая другие случаи:

2) Что, если я хочу загрузить другую страницу в качестве ответа? Что было бы лучше практиковать тогда?

3) И что было бы лучше, если бы я не хотел ни перенаправлять пользователя, ни перезагружать страницу, а просто отправлять данные на сервер и запускать сервер код стороны?

...