Web

[Backend] Django MTV중 TV 해보기

ㅋ. ㅋ 2023. 10. 14. 16:12

2020년 글 백업 ㅎㅎ 장고 이후로 한~번도 안 써봄

하 내가 백엔드를 했어야했는데~


 

 

Django는 MVC 가 아니라 MTV 

이번에 내가 한 건 db가 필요 없어서 model은 없고 template이랑 view만 썼다

view가 spring의 controller 같은 느낌


 

[home.html]

    <body>
        <div id = 'search'>
            {% csrf_token %}
            <input type="text" id="msg"/>
            <input type="submit"/>
        </div>

        <script>
            function sendData(){
                var symbol = $('#msg').val();
                $.ajax({
                        url : 'app',
                        dataType : 'json',
                        data : {'msg' : msg},
                        type : 'POST',
                        success : function(res){
                            ...
                         }
                });
            }
        </script>
    </body>

 

비동기 통신으로 element 갖다 붙히려고 jQuery 씀

 


[view.py]

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.template import loader
import json

@csrf_exempt
def main(request):
    if request.method == 'GET':
        template = loader.get_template('home.html')
        context = {'title': 'test'}
        return HttpResponse(template.render(context, request))

    if request.method == 'POST':
        msg = request.POST['msg']
        ...
        context = {'result': msg}
       
        return HttpResponse(json.dumps(context), "application/json")
 

spring에서는 같은 주소에 대해 @GetMapping, @PostMapping 해서 다 따로 분리 했는데

장고는 걍 한번에 받아서 if 문을 쓴다..ㅇ0ㅇ!

그리고 장고는 어노테이션을 데코레이션 이라 부르더군

장고 할줄 아는 사람한테 이렇게 하면 rest냐니까 데코레이션 붙혀서 하라고 피드백이 왔다

 


[urls.py]

-----프로젝트 ----

| 어플리케이션 1 |

| 어플리케이션 2 |

-------------------

# 프로젝트 urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('pro/',include('testApp.urls')),
]
 
# 어플리케이션 urls.py

from django.urls import path
from . import views

app_name = 'testApp'
urlpatterns = [
    path('app/', views.main, name='main'),
]
 

장고 되게 신기했던 것

urls매핑을 따로 파일 파서 한다

프로젝트 url/어플리케이션 url 이런식으로 매핑 됨 -> ../pro/app/

 

여기 또한 아주 헷갈리는 부분이었다

urls.py 에 뭘 적으라는데 urls.py가 2갠데 어디에 적어야하는지 너무 헷갈리는 것이다

 

암튼 시행착오와 구글링을 통해 알아낸 결과

프로젝트 urls.py에 어플리케이션을 등록해주면 됨

그리고 어플리케이션 urls.py에 함수들을 등록하면 됨

 

어플리케이션 urls.py에는 함수명을 적는데 이게 또 문화컬쳐쇼크충격

스프링 api 쓸 적에는 함수명은 아무데도 쓰이지 않았단 말야

 


 

내가 사용해야하는 api가 파이썬으로만 잘 돼있어서 장고를 쓰게 되었다

장고.. 아직 갈 길이 많이 남았지만 (앞으로 또 할런지는 모르겠지만)

유익하고 헷갈리고 어려운 시간이었다 ^__^