Today Sangmin Learned
728x90

오늘은 .. SPA 구현을 위한 걸음마를 떼었다. 어제 Ajax는 서버 기반이 있을 때만 눈으로 확인이 가능하다는 것을 알게 되었고 내가 그나마 조금이라도 할 줄 아는 건 Django였기 때문에 (Node.js도 할 줄은 알지만 진짜 기초중에서도 기초밖에 몰라서 생각을 안해봄) Django를 이용해서 Ajax통신을 연결하고, 버튼을 눌렀을 때 새로고침 없이 views.py에서 데이터를 불러와서 내보내주는 과정을 구현했다.

Django 서버 연결 후 execute 버튼을 누름으로써 views 내에 있는 data를 불러왔다.

Ajax에 대해 이제야 걸음마를 좀 뗀 수준인데, 아직 저기에서 보다시피 문제가 있다. data 내 Organization에 대해 for문을 돌리도록 설계를 했는데, 내가 원하는 건 Sangmin Park steadily-worked 이런 식으로 name과 github가 병렬적으로 나오는 구조인데, 아직 거기까진 생각이 미치지 못했다. JS 배열에 대한 개념이 부족하기 때문이라고 생각한다. 좀 더 해봐야한다. ㅜㅜ 프론트엔드쪽은 (물론 백엔드도 당연하겠지만) 해야 할 것 / 알아야 할 것이 너무 많은 것 같다. 일상생활에서 우리가 흔히 접하는 기술들이 고급스러웠던 것은 유망한 프론트 개발자가 구현했기 때문이 아닐까 하는 생각이 들면서 .. 회사에서 요구하는 수준의 JavaScript 실력에 도달하려면 한참 멀었다는 사실을 다시 한 번 깨달았다.

 

views.py

from django.shortcuts import render
from django.http import HttpResponse
import json

# Create your views here.
def main(request):
    return render(request, 'index.html')

def ajax(request):
    data = {
      'Organization': [
        {
          "name": "Sangmin Park",
          "github": "steadily-worked"
        },
        {
          "name": "Woosik Kim",
          "github": "well-balanced"
        },
        {
          "name": "Hyeonsu Lee",
          "github": "incleaf"
        },
        {
          "name": "Hoseon Lee",
          "github": "indante"
        }
      ] 
    }
    response = json.dumps(data)
    return HttpResponse(response)
    # return HttpResponse(json.dumps(data), content_type='application/json') 
    # content를 context에 담고 content_type을 json.dumps(context)가 json화 시켜준다. 그리고 만든 걸 다시 JS에 넘겨준다.

urls.py

from django.contrib import admin
from django.urls import path, include
from . import views


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.main, name='main'),
    # ajax 통신요청 경로
    path('ajax/', views.ajax, name='ajax'),
]

이 두 부분을 제외하고 나머지는, Ajax 구현을 위한 Django에서의 초기 세팅과 다르지 않으므로 생략한다.

 

 

index.html

<!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>Ajax test</h1>
    <p id='example'>hello<br></p>
    <input type='button' id='execute' value='execute' />

    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    <!-- jQuery 라이브러리 사용 -->
    <script src='https://code.jquery.com/jquery-3.2.1.min.js'></script>
    <script>
        $('#execute').click(function() {
            $.ajax({
                url:'{% url "ajax" %}',
                dataType: 'json',
                success: function(data){
                    alert('good');
                    var str= '';
                    for (var name in data.Organization){
                        str += '<li>We are: '+name+'</li>'; // key값 출력시 name
                        str += '<li>Members: '+name.name+'</li>';
                    }
                    $('#example').html('<ul>'+str+'</ul>')
                },
                error: function(request, status, error){
                    alert('bad');
                    alert(error);
                    $('#example').html('AJAX 통신에 실패했습니다.')
                }
            })
        })
    </script>
</body>
</html>

보다시피 jQuery를 기반으로 했다.. jQuery가 현재 사양화되고 있다고 하지만 대부분의 웹페이지가 jQuery 기반이고 하니 주를 Vanilla JS로, 부를 jQuery로 가져가고자 한다. 

 

참 JS는 .. 매력적인 언어인데 어렵다. 2년간 꾸준히 열심히 해야지..

'today i learned' 카테고리의 다른 글

today i learned 9/5  (0) 2020.09.07
today i learned 9/4  (0) 2020.09.04
today i learned 9/2  (0) 2020.09.03
today i learned 9/1  (0) 2020.09.02
today i learned 8/31  (0) 2020.09.01
profile

Today Sangmin Learned

@steadily-worked

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!