728x90
반응형
Django에서 HTTP request는 내장기능으로 GET, POST만 지원하고
DELETE, PUT은 지원하지 않는다.
print(dir(request))
위와 같이 찍어보면
['COOKIES', 'FILES', 'GET', 'LANGUAGE_CODE', 'META', 'POST', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_current_scheme_host', '_encoding', '_get_full_path', '_get_post', '_get_raw_host', '_get_scheme', '_initialize_handlers', '_load_post_and_files', '_mark_post_parse_error', '_messages', '_read_started', '_set_content_type_params', '_set_post', '_stream', '_upload_handlers', 'accepted_types', 'accepts', 'body', 'build_absolute_uri', 'close', 'content_params', 'content_type', 'csrf_processing_done', 'encoding', 'environ', 'get_full_path', 'get_full_path_info', 'get_host', 'get_port', 'get_signed_cookie', 'headers', 'is_secure', 'method', 'parse_file_upload', 'path', 'path_info', 'read', 'readline', 'readlines', 'resolver_match', 'scheme', 'session', 'upload_handlers', 'user']
GET, POST만 있고, COOKIES, FILES 등이 있지만
DELETE, PUT은 존재 하지 않는다.
기본 내장 기능이 DELETE, PUT을 지원하지 않을 뿐이지, 이용할 방법이 있긴 하다.
위 내용을 보면 'method' 가 있다.
아래와 같이 front 에서 ajax를 통해 DELETE method를 통해 데이터를 보냈을 때
request.method를 통해 어떤 method로 들어왔는지 확인 가능하다
Javascript, Ajax
function delete_some() {
const somes = document.querySelectorAll(".somes");
const checkedSomes = Array.from(repos).filter(box => box.checked).map(box => box.getAttribute('some_id'));
$.ajax({
url: `${window.location.pathname}/delete/some`
,method: 'DELETE'
,data: JSON.stringify({"some_id_list": checkedSomes})
,async: true
,success: function (data) {
console.log(data);
}
});
}
Python, Django
def delete_group_repo(request, group_id):
print(request.method)
body_unicode=request.body.decode('utf-8') # binary 형태의 data decode
body_data = json.loads(body_unicode)
print(body_data)
for i in body_data.get('some_id_list'):
print(i)
return JsonResponse({"status":"success"})
Result
DELETE
{'some_id_list': ['8', '9']}
8
9
* POST에서 payload에 list를 담아서 보내는 경우,
{"some_id_list":JSON.stringify(chekedSomes))} 와 같이
Object 전체가 아니라 value 값에만 JSON.stringfiy()를 입혀서
Django 단에서 body_unicode를 print하면 다음과 같이 나와서 데이터 처리가 불가능해진다.
some_id_list=%5B%5D
728x90
반응형
'Python > Django' 카테고리의 다른 글
Django: ckeditor # django-ckeditor # 텍스트 에디터 (0) | 2023.11.12 |
---|---|
Python Django: symmetrical option in ManyToMany # ManyToMany에서 한쪽만 관계 설정 # 테이블 자신을 참조하는 경우 (2) | 2023.10.16 |
Python Django: select_related (0) | 2023.05.09 |
Python Django: 동시 접속 로그인 막기 # session # session_key (0) | 2023.04.30 |
Python Django - request session 이용하기 # get 에서 post로 data 넘기기 (0) | 2023.04.28 |