WEB/JavaScript

[JavaScript][비동기 with Django] 2. 비동기 팔로우 구현

bay07 2024. 4. 25. 13:59

 

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

 

* Axios 홈페이지 들어가서, CDN 코드 하나 복사하기

https://axios-http.com/kr/docs/intro

 

시작하기 | Axios Docs

시작하기 브라우저와 node.js에서 사용할 수 있는 Promise 기반 HTTP 클라이언트 라이브러리 Axios란? Axios는 node.js와 브라우저를 위한 Promise 기반 HTTP 클라이언트 입니다. 그것은 동형 입니다(동일한 코

axios-http.com


 

# accounts > templates > accounts > profile.html 

이제 form이 아니라 axios를 통해서 요청을 보내겠다 

더 이상 form의 action과 method가 필요가 없어진다 

더보기
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>{{ person.username }}님의 프로필 페이지</h1>
  <div>
    팔로잉 : {{ person.followings.all|length }} / 팔로워 : {{ person.followers.all|length }}
  </div>
  {% if request.user != person %}
    <div>
      {% comment %} 1. 요청은 axios로 대체되기 때문에 form 태그의 action과 method를 삭제 {% endcomment %}
      {% comment %} form에 id값 부여해주기 {% endcomment %}
      <form id="follow-form">
        {% csrf_token %}
        {% if request.user in person.followers.all %}
          <input type="submit" value="언팔로우">
        {% else %}
          <input type="submit" value="팔로우">
        {% endif %}
      </form>
    </div>
  {% endif %}

  <div>
    <h2>{{ person.username }}님이 작성한 게시글</h2>
    {% for article in person.article_set.all %}
      <div>{{ article.title }}</div>
    {% endfor %}
  
    <h2>{{ person.username }}님이 작성한 댓글</h2>
    {% for comment in person.comment_set.all %}
      <div>{{ comment.content }}</div>
    {% endfor %}
  
    <h2>{{ person.username }}님이 좋아요한 게시글</h2>
    {% for article in person.like_articles.all %}
      <div>{{ article.title }}</div>
    {% endfor %}
  </div>

  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
        // 2. submit 이벤트가 발생하는 form 태그 선택
      const formTag = document.querySelector('#follow-form')
       // 3. 선택한 form 태그에 이벤트핸들러 할당
      formTag.addEventListener('submit', function (event) {
        // 4. submit 이벤트의 기본 동작을 취소
          event.preventDefault()
          console.log(event)
       })
  </script>
</body>
</html>

 

# 서버 켜서 확인해보기 

follow 버튼을 눌렀을 때, 콘솔에 event가 뜨는지 

python manage.py runserver

 

http://127.0.0.1:8000/articles/

 

잘 뜨는 것을 확인할 수 있다

일단은 이벤트 발생을 감지하기만 해도 됨