23.04.18 TIL (장고에서 PUT 쓰기)

오늘 한 일

  1. DRF 1강의 수강 및 정리(링크)
  2. 페어 프로그래밍

Django에서 PUT 쓰기

def view(request):
    if request.method=="PUT":
        data_a=requset.PUT.get("data_a","")

위와 같이 Django에서 POST와 같이 PUT을 사용하여 데이터를 추출하려고 하면 다음과 같은 오류가 발생합니다.

‘WSGIRequest’ 객체에 ‘PUT’ 속성이 없습니다.

재판. 도대체 Django에서는 PUT을 사용할 수 없으므로 게시물만 사용할 수는 없습니다.

삭제에는 get을 사용하고 put에는 post를 사용하고 실제 DB 작업과 일치시키십시오.


캉!

그렇게 팀 프로젝트를 끝내고 피드백 세션에서 채찍질을 당했다(은유적 표현이다). Django는 PUT blah blah를 처리하지 않습니다. DRF도 PUT blah blah라고 말하거나 정보를 잘못 이해한 것 같습니다. 아니, 사실은 ‘그런 것 같다’가 아니라 머리가 아파서 그만 찾던 게 사실이다. 그래서 다시 찾아봤습니다.

https://haah.kr/2017/05/23/rest-http-method-in-html-form/

REST – HTML 양식에서 GET/POST만 지원되는 이유

연속 목록 REST – 긴 여정의 시작 REST – HTML 양식이 GET/POST만 지원하는 이유 REST – 논문 훑어보기(요약) REST – 당신은 REST를 좋아합니다 REST – Roy가 REST를 엽니다 – 당신이 만든 것은 REST가 아니지만 괜찮습니다 나머지 –

haah.kr

Django에서 PUT을 사용할 수 없다고 생각했지만 사실이 아닙니다. HTML입니다. 양식 태그는 GET 및 POST만 지원합니다.그렇기 때문에 앞에서부터 form 태그로 데이터를 보내든 Postman으로 요청 본문으로 데이터를 보내든 데이터가 제대로 전송되지 않습니다. 사실 form-data 형태로 보내지고 요청 내용을 열어보면 그 어디에도 데이터가 없습니다.

솔루션: 작성 방법

오늘 DRF 강의에서 들은 ‘Content-Type’에 대한 답이 있었습니다. Content-Type 헤더는 문자 그대로 전송된 데이터의 유형을 나타냅니다. 이에 따라 데이터를 받는 쪽에서 데이터를 표현하는 방법을 결정합니다.

form을 이용하여 전송하기 때문에 content-type은 양식 데이터 또는 x-www-form-urlencoded인 경우 Django views.py의 요청에 포함된 QueryDict에 접근하여 데이터를 얻을 수 있습니다. 그리고 POST 및 GET은 이러한 이름의 형식으로 Content-Type을 처리할 수 있으므로 처음에 언급한 방식으로 처리할 수 있습니다.

그러나 PUT과 DELETE는 폼에서 지원하지 않으므로 다른 방법으로 데이터를 전송할 수 있습니다. 하자마자 ‘응용 프로그램/json’오전.

우편 배달부로부터 애플리케이션/json데이터 보내기


위와 같이 body – raw – json 을 선택하여 json 형식으로 데이터를 생성하여 전송합니다. 코드를 보면 Content-Type이 잘 정립되어 있고 본문 데이터도 JSON 형식으로 저장되어 있음을 알 수 있습니다.


참고로 폼으로 저장하면 이런 모양이 됩니다.

전면에 애플리케이션/json데이터 보내기

가져오기 또는 아약스를 사용할 수 있습니다.

fetch(url, {
  method: "PUT",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify(data)
})
.then(response => {
  // Handle the server response
})
.catch(error => {
  // Handle any errors
});
$.ajax({
  url: "url",
  type: "PUT",
  data: JSON.stringify(data),
  contentType: "application/json",
  success: function(response) {
    // Handle the server response
  }
});

백엔드에서애플리케이션/json데이터로 받다

req = loads(request.body)
locate = req.get('locate', '')
description = req.get('description', '')

또는 아래 스택 오버플로의 메서드를 사용할 수 있습니다.

https://stackoverflow.com/questions/4994789/django-where-are-the-params-stored-on-a-put-delete-request

Django – PUT/DELETE 요청에 저장된 매개변수는 어디에 있습니까?

새 django 프로젝트에 대해 RESTful 패턴을 따르고 싶습니다. 그리고 PUT/DELETE 요청이 있을 때 매개변수가 어디에 있는지 알고 싶습니다. 내가 아는 한 GET & POST 쿼리만 표시됩니다…

stackoverflow.com

강의 및 문제 해결에서 배운 교훈

웹의 기본 작동이 리콜되었습니다.

양식에서 PUT 및 DELETE를 사용할 수 없음을 발견했습니다.

다양한 헤더의 기능에 대해 새로운 사실을 배웠습니다.

참조

https://eunjin3786.133

(Django) HTTP 요청 수신 및 응답(GET, POST, PUT, DELETE)

이 게시물은 두 단계로 구성되어 있습니다. 1단계: HTTP Request 잘 수신되는지 확인 + GET 요청에 Dummy JSON 부여 2단계: 실제 HTTP Method 실행하면서 데이터 터치 1단계 Django의 View는

eunjin3786.tistory.com