Tengo una función JS que envía una solicitud POST
let username = document.querySelector('.fw-user').innerText; if (document.querySelector('.follow')) { let followButton = document.querySelector('.follow'); followButton.addEventListener('click', () => { fetch(`/follow/${username}`, { method: 'POST', }) .then(() => { window.location.reload(); }) }) }urls.py
path("follow/<creator>", views.follow, name="follow")vistas.py
@csrf_exempt @login_required def follow(request, creator): if request.method == "POST": get_acc_id = User.objects.get(username=request.user.username) get_creator_name = User.objects.get(username=creator) follow = Followers.objects.create(follower_id=get_acc_id.id, creator=get_creator_name.username) get_creator_name.followers += 1 get_creator_name.save() return HttpResponse(status=204)html
<button type="button" class="follow btn btn-outline-light btn-sm">Follow</button>Cuando presiono este botón, la función envía 2 solicitudes POST, en lugar de 1.
Capturas de pantalla:
La red

Consola

El problema no estaba en fetch , era porque la función de seguimiento se ejecuta cuando se carga DOM , y tenía otra función con el mismo controlador de eventos. Debido a esto, el controlador de eventos se ejecutó varias veces.