Django - 생성기능 구현 (request response object)
자, 내가 만든 views.py의 create 함수를 살펴보자.
create 함수를 보면 사용자의 요청이 request를 통해 들어오고 그 요청을 장고가 받아 이와 관련된 여러가지 정보들을 분석해 내가 만든 create 함수를 장고가 호출한다.
이걸 호출하면서 첫번째 파라미터의 인자로 http request라고 하는 객체를 만드는데 이 객체 안에 사용자의 요청과 관련된 여러가지 정보들을 패키징해 객체화 시켜 사용자들에게 공급한다.
이렇게 되면 나는 저 request를 분석해서 처리를 하는 코드를 작성한다. (53~58번줄!)
그리고 http response 라고 하는 객체를 응답, 즉 반환해주면 그 객체가 장고의 의해서 사용자의 브라우저로 전송되게 된다.
그래서 지금 할 것은 POST로 들어온 데이터, 즉 submit 버튼을 눌렀을 때의 요청이 들어오는 데이터를 화면에 출력해보려고 한다. (현재 Create 버튼을 누르면 Get 방식으로 요청이 들어오고, 내용을 다 채운 뒤에 submit 버튼을 누르면 Post 방식으로 요청되는 상태!)
그리고 elif를 써서 POST 방식으로 요청이 들어올 때, 즉 submit 버튼을 눌렀을 때는 사용자가 입력한 title과 body 부분을 POST 방식으로 가져와 새로운 변수에 저장해준 뒤 그 새로운 변수를 원래 있던 topics 변수에 넣어줬다. (GET 요청이랑 POST 요청은 이해 잘 되는데 전체적인 흐름은 사실 잘 이해가 안된다... 반복 학습 GO)
그 뒤에 이렇게 제출 버튼을 누르면 목록에 추가가 잘 되는 것을 볼 수 있는데, dddd랑 장고짱의 내용과 제목이 모두 똑같은 것이 문제다. 어떻게 고칠 수 있을까?
이 문제가 나오는 이유는, 코드를 보면 저기 새로 만든 nextId라는 변수는 현재 4라는 수로 지정이 되어있는 상태이다.
그렇기 때문에 내가 아무리 새로운 글을 만들어도, 애초에 create 함수에서 내가 POST 방식으로 요청이 들어오는건 4번째 id를 가지도록 지정했기 때문에 제출 버튼을 누르고 새로 추가된 글들은 상세보기 시 모두 같은 제목과 내용을 가지고 있는 것이다.
이건 되게 쉽게 해결할 수 있었는데, 그냥 POST로 요청이 들어올때마다 nextId 변수에 담긴 수를 1씩 더해줘서 해결했다.
마지막으로 해줄 것은, 지금은 새로운 글을 생성하면 그냥 홈 화면으로 가는데 새롭게 생성된 글의 상세 페이지로 가도록 해주려고 한다. (redirect!)
이렇게 url 이라는 변수에 read 함수에 nextId를 더해 담아준 뒤, url 변수를 redirect에 담아 변환해줬다.
redirect가 뭔지 잘 모르겠어서 구글링을 해봤는데, 현재 url 대신 다른 url을 방문하도록 지시하는 방법이란다.
그러니까 제출 버튼을 눌렀을때 그대로 홈 경로로 가는 것이 아니라 redirect를 통해 url 변수에 담긴 새 글의 상세페이지 경로로 가라고 지시했기 때문에 새 글을 작성했을때 그 글의 상세 페이지로 가게 된 것이다.
비유적 표현으로 내가 도로를 운전하고 있는데 고속도로로 쭉 가는 것이 일반적이지만, 가끔씩 '도로 폐쇄, 우회로' 라는 표지판을 만날 때도 있다.
이처럼 이 표지판은 목적지에 도달하기 위해 다른 경로로 안내하는 redirection 이라고 보면 된다!
한줄요약 - redirection은 사용자의 요청을 애플리케이션 내의 다른 url이나 보기로 안내하는 메커니즘이다 ~