해리의 데브로그

Django 03 - 요청 & 응답 (Django 내부 & 외부 웹)

|

django 내 정보 주고 받기

Throw와 Catch라는 함수를 정의하여 django 내에서 정보를 주고 받는 process를 살펴 보자

요청 보내기(Throw)

  • urls.py
    • 기본주소/throw 라는 주소를 요청받으면, views.py 내 throw 함수를 실행시키는 url 패턴을 작성
urlpatterns = [
    path('throw/',views.throw),
]
  • view.py
    • input 을 보낼 페이지에 연결하는 함수 throw view.py 작성
def throw(request):
    return render(request,'throw.html')
  • throw.html
    • input 태그를 사용하여 데이터를 입력함.
      • 입력되는 값은 dict와 유사한 형태로 저장되는데 여기서 dict의 key 값이 input 태그의 name 속성의 값임.
      • 아래의 예시의 경우, { name : 사용자 입력값} 의 형태를 띄게 되며, name이라는 key값을 통해 입력값에 접근 할 수 있게됨.
    • form 태그를 사용하여 입력된 값을 넘겨줄 경로와 HTTP method를 정의함
      • action : 입력값을 어디로 넘길건지를 설정(URL 경로 설정)
      • method : 어떠한 방식으로 보낼지를 설정 (POST/GET)
<body>
    <form action="/catch", method="get">
        <input type="text" name="message"/>
        <input type="submit" value="Submit"/>
    </form>
</body>

응답 하기(Catch)

  • urls.py
    • 기본주소/catch 라는 주소가 요청되면, views.py 내 catch 함수를 실행시킴.
    • 우리는 앞서, 위의 요청보내기에서 form 태그의 action 값으로 해당 경로를 이미 설정해놨음. 따라서, throw.html에서 내용을 작성하여 제출하면, 아래의 url pattern에 따라 catch 함수가 실행됨
urlpatterns = [
    path('catch/',views.catch),
]
  • view.py

    • throw.html에서 입력된 값이 dict의 형태로 저장되며, 여기서 key는 input 태그의 name 속성값임. 우리는 message라고 값을 지정하였음. message 라는 key를 통해 사용자가 입력한 value값에 접근한다.
    • 이때 사용하는 Django 문법은 ` request.GET.get(‘message’)` 임.
      • request: 정보/데이터를 요청함.
      • GET: throw.html - form 태그 - method 속성의 “get”을 의미함 (어떠한 방식으로 요청을 보낼건지?)
      • get(‘message’) : dict의 value값을 갖고오는 메서드. message로 정의된 name 속성의 내용(value)를 갖고옴. 여기서 value는 throw.html에서 사용자가 입력하는 input 내용임!
    • 최종적으로, throw.html에서부터 갖고온 사용자 입력값을 message라는 변수에 저장하고 템플릿 변수로 넘김
def catch(request):
    message = request.GET.get('message')
    return render(request, 'catch.html', {'message': message})
  • catch.html
    • 템플릿 변수 message 의 결과값으로 throw.html에서 사용자가 입력한 input 내용이 들어온다.
<body>
    <h1>Catch! </h1>
</body>


외부 웹으로 요청 주고 받기

내부에 요청을 보내고 응답하는것이 아니라, django 외부에 요청을 보내는 것을 해보자.

네이버에서 어떤 단어를 검색하면 주소창은 아래의 구조를 띄는데, 내부에서 요청을 보내고 응답을 했을 때와 매우 유사한 형태를 띄고 있는 것을 알 수 있다. 이러한 구조를 활용하여 외부 웹으로 요청을 주고받을 수 있음.

> #네이버 검색 결과 url
> https://search.naver.com/search.naver?query=python
> #Django 내 응답 결과 url    
> http://기본주소/catch/?message=안녕
  • urls.py
    • 기본주소/naver/ 로 요청이 들어오면 views.py 내 naver 함수를 호출
urlpatterns = [
    path('naver/',views.naver),
]
  • views.py
def naver(request):
    return render(request, 'naver.html')
  • naver.html

    • 내부에서 요청을 보내고 응답할 때는 form 태그의 값으로 "/catch" 처럼 기본주소 + 넘길 주소 url만 입력하엿으나, 외부로 보낼 때는 전체 주소를 넘겨야함.
    • 네이버 검색 결과 URL은 https://search.naver.com/search.naver + ?query= 검색어 의 구조를 띄므로, 이를 활용하면됨.
    • 이때, input 태그의 name 속성에는 반드시 query를 사용해야함. 이를 통해 input 태그로 들어오는 입력값이 네이버 검색 결과 URL https://search.naver.com/search.naver?query=입력값 과 동일해짐.
    • 이 URL을 GET 방식으로 요청을 보낸다는 의미.
<body>
    <form action="https://search.naver.com/search.naver", method="get">
        <input type="text" name="query"/>
        <input type="submit" value="Submit"/>
    </form>
</body>

Comments