TIL Django view 통한 http 통신

django에서 HTTP 통신을 하려면 urls.py를 이용한다. 이와 관련된 내용을 정리.

✅ urls.py 의 기능

들어온 요청에 대해서 어디로 가야할 지 길을 안내하는 역할

처음 장고 프로젝트를 시작하면 프로젝트 이름과 동일한 하위 디렉토리가 생성이 된다. 그 안에 urls.py가 자동을 만들어진다.
urls.py요청이 들어오면 어디로 가서 처리해야할지 알려주는 일종의 네비게이터라고 할 수 있다. 은행에 가보면 대출이나 환전 등 원하는 업무의 성격에 따라 가야할 창구가 달라지는데 입구에서 알맞은 창구의 번호표를 뽑아주는 직원과 유사한 역할을 한다.

✅ 장고 http 통신 과정

main urls.py →→ app's urls.py →→ app's views.py →→ httpie check

순서를 정리하기 이전에 장고의 directory 구성부터 파악하는 것이 좋다.


python manage.py start project owner를 타이핑하여 장고 프로젝트를 시작하면 저기서 relations를 제외한 폴더가 자동으로 생성이 된다. (relations- 나중에 추가)

프로젝트 이름과 동일한 (owner) directory가 한가지 더 생성이 되는데 여기에는 프로젝트의 뇌(?!)에 해당하는 settins.py 와 여러 모듈이 있다. 그 중 오늘 관심있는 것은 urls.py다!

urls.py를 처음 열어보면 여러 설명 텍스트와 기본 코드가 적혀있지만 사용하지 않는 코드를 제외하고 실질적으로 사용할 코드만 남겨보면 위 이미지와 같다.

내용을 살펴보면 path는 기본 홈페이지주소 (로컬에서 진행하는 경우는 127.0.0.1 ) 뒤에 붙는 추가 url을 의미한다.

지금 프로젝트의 경우에는 로컬에서 진행하고 있기 때문에 localhost:8000/relations/ 를 의미한다.
이 url로 전달될 때 어떤 행동을 할 지 지정해주는 것을 의미한다.

다음으로 include 부분은 relations 안에도 추가적으로 url이 필요할 수 있다.

관계를 볼 때 현재 관계 정도 - relations/status , 처음 가족이 된 기간- relations/date 등이 추가로 요청될 수 있는 자료들이다. 이런 세부적인 네비게이션이 필요할 수 있기 때문에
include를 통해 앱 내부에 추가적으로 만들어준 urls.py로 이동할 수 있다.

이렇게 세부적으로 urls.py를 만들어주고 안에 추가적으로 어떤 행동을 할지 지정해줄 수 있다.

현재는 앱이 하나밖에 없어서 relations 앱으로만 이동을 하지만 웹페이지에 여러 앱이 필요하게 된다면 추가적으로 path가 추가되는 식으로 저장이 된다.

urlpatterns = [
	path('relations/',include('relations.urls'),
    path('accounts/',include('accounts.urls'),
    path('orders/',include('orders.urls'),
    ]

😭 진행과정에서 발생한 오류

ImproperlyConfigured The included URLcof does not appear to have any pattern

이와 같은 오류를 받게 되었는데 구글링을 해보면 대부분이 urlpatterns로 입력해야 하는 것을 url_patterns로 입력하는 등 다른 별도의 방법을 지정했기 때문이다.

내 경우는 urlpattern으로 입력 했다! (~~ 애증의 s ㅂㄷㅂㄷ) 이를 urlpatterns로 다시 고치고 돌리니 결과가 잘나왔다!

생각보다 장고에서 지켜야 하는 컨벤션이 많은 것 같아서 조심해야 할 것 같다.

기존 파일을 건드리고 에러 만나보는 것도 큰 경험이지!

200 메시지를 보냈으나 301이 리턴된 경우

다음과 같이 통신이 성공을 했다면 200을 받는 메시지를 작성해지만

실제 확인을 해보면 301로 계속 리턴이 되었다 ㅠㅠ 이유를 1시간 넘게 계속 구글에서 찾다가 내 코드를 멘토님과 같이 코드를 돌아보게 되었다.

이게 무엇인가 ?! get이 두개가 있는가 ......... get 함수 1개만 있고 pass로만 구성했다면 다음과 같은 value error가 나온다. (아마 POST를 미리 만들려고 넣은 것 같은데... Yagni "You Aren't Gonna Need It". 기억하자....)

get 함수 2개가 요청이 오다보니 컴퓨터 입장에서는 get 2개 중에서 어디로 요청을 처리할 지 몰라서 301 (redirect)을 던지게 되었다.

두번째 get을 제거하고 코드를 돌리면 정상적으로 200 메시지를 받게 되었다!

좋은 웹페이지 즐겨찾기