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
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 메시지를 받게 되었다!
Author And Source
이 문제에 관하여(TIL Django view 통한 http 통신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nellholic108/TIL-Django-view-통한-http-통신저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)