뉴스피드 팀 프로젝트에서 내가 오늘 진행한 부분
문의게시판 모델링, CRUD 완성!!, 상세페이지 이동 완성
상세페이지 이동과 수정, 삭제기능을 처음 시도했기 때문에 시행착오를 꽤 겪었다!
Today I Learned
1. 수정기능 구현 시 입력받았던 값을 입력폼에서 그대로 보여지게 하고싶었다.
<input type="text" value="내용" name="inputValue"> 이 기능을 이용하면 된다.
그래서 약간의 변형을 하여서 value값에 {{}}을 이용하여 변수를 출력하도록 했다.
2. 튜터님과 함께한 form태그안에서 PUT, DELETE 구현하기는 꽤 고난과 역경이었다..
왜냐하면. . 원래 Httpmethod는 4가지의 요청(POST, GET, PUT, DELETE)을 받는다.
form태그에서는 사실상 GET, POST만 요청을 받기 때문에 Ajax나 JavaScript를 이용하여서 서버로 요청하는 방법이 있지만 우리가 강의에서 배웠던 지식으로는 form으로 이용해서 과제를 하는 것이 맞다고 생각해서
form을 이용해서 수정,삭제 기능을 여러가지 방법으로 시도해보았다.
(1) 첫 번째 시도
<input type="hidden" name="_method" value="PUT 또는 DELETE">
=> 실패..
일반적으로 지원하지 않는 HTTP 메소드인 PUT이나 DELETE를 구현할 때 사용하는 코드인데,
폼에 숨겨진 input필드를 추가하고 값을 설정하여서 폼 제출시 서버로 메소드를 바꿔보려고 했는데 실패했다..
(2) 두 번째 시도
form태그를 따로 하나 더 만든 뒤, 위의 코드를 넣어봤다.
<form method="post" action="{% url 'qna-delete' pk=post.pk %}">
<input type="hidden" name="method" value="delete">
{% csrf_token %}
<button type="submit">삭제</button>
</form>
=> 2차 실패 ..
(3) 세 번째 시도
@require_http_methods(["DELETE"]) 데코레이터를 이용하여서 강제로 메소드를 바꿔보았다.
=> 3차 실패
(4) 네 번째 시도
<form method="post" action="{% url 'qna-delete' pk=post.pk %}">
{% csrf_token %}
<button type="submit">삭제</button>
</form>
form 태그를 따로 하나 더 만든 뒤 post로 그냥 요청을 받고 delete()함수를 사용해서 redirect하였다.
=> 성 공 !
- 결론 : HTML form은 GET과 POST 메소드만을 지원하기 때문에 PUT과 DELETE를 구현하기 위해선 다른 방법을 찾아야한다. 예를 들면 form 태그를 따로 만들어서 POST메소드로 요청을 보내고 각각의 태그나 삭제, 수정 작업을 처리해야 한다.
3. urls.py 에서 urlpatterns를 만들 때, RESTful한 경로를 정확히 작성해야 클라이언트나 프론트엔드가 API를 더 쉽게 이해하고 활용할 수 있다.
4. redirect로 URL을 리디렉션할 때,
redirect ('이동할 URL')에서 매개변수에 문자열 형태로 url 주소가 들어간다.
따라서 int값이 들어가면 안되기 때문에 str로 int값을 바꿔줘야한다.
'내일배움캠프 > 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 TIL 25일차 (0) | 2023.04.15 |
---|---|
내일배움캠프 TIL 24일차 (0) | 2023.04.13 |
내일배움캠프 TIL 22일차 (2) | 2023.04.11 |
내일배움캠프 TIL 21일차 (1) | 2023.04.11 |
내일배움캠프 TIL 20일차 (0) | 2023.04.07 |