[Django]장고로 MySQL에 데이터 수정(put)하기

업데이트:

장고로 MySQL에 데이터 수정(put)하기

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

참고 링크

DB

백엔드

프론트엔드

1. 실습 준비

본 예제는 맥OS 환경에서 실행했습니다. 실습 준비는 이전 포스팅을 참고해주세요.

이번 실습에서는 PUT 방식을 이용해 장고에서 MySQL로 기존에 존재하는 데이터를 수정해 해보겠습니다.

2. test01/views.py 수정

먼저 test01 앱에 존재하는 views.py파일에 다음 코드를 추가합니다.

@api_view(['PUT'])
def putMember(request, pk):
    reqData = request.data
    data = Test01.objects.get(id=pk)
    serializer = TestDataSerializer(instance=data, data=reqData)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

데이터를 수정할 때는 위 코드와 같이 PUT메소드를 사용합니다. reqData는 내가 수정을 원해서 서버에 전달하는 json데이터를 의미하며 data는 기존에 DB에 존재하는 데이터를 불러온 것을 의미합니다. 요청시 pk도 함께 전달하므로 해당 pk에 해당하는 데이터를 불러오는 것입니다. 이 때 pk는 데이터베이스 상의 id컬럼이라는 것을 볼 수 있습니다. 나머지 부분은 이전 포스팅에서의 POST 메소드와 비슷합니다.

따라서 전체 코드는 위와 같이 됩니다.

3. test01/urls.py

다음으로 test01 앱의 urls.py파일에 다음 코드를 추가합니다.

path('putMember/<str:pk>', views.putMember, name="putMember"),

위 코드를 추가하면 전체 코드는 아래와 같이 됩니다.

4. 서버 가동

이제 테스트르 위해 서버를 가동해보겠습니다. 먼저 migrate를 해줍니다.

$ python manage.py makemigrations

No changes detected

$ python manage.py migrate       

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, test01
Running migrations:
  No migrations to apply.

그리고 다음과 같이 장고 서버를 올려줍니다.

$ python manage.py runserver     

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
June 04, 2022 - 06:31:32
Django version 4.0.2, using settings 'dbcontest.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

5. 데이터 수정해보기

우리는 기존 MySQL에 있는 데이터중 id가 3에 해당하는 hoshiumi 데이터를 수정해보겠습니다. 다음 데이터를 보면 이름 첫문자가 소문자인데 이를 대문자로 수정하겠습니다.

데이터 수정을 위해 웹 브라우저를 열고 http://127.0.0.1:8000/test/putMember/3에 접속합니다. 주소의 마지막 3은 id가 3이라는 것을 의마하며 이는 id=3에 해당하는 데이터를 수정하겠다는 말입니다.

접속을 하면 위와 같은 창이 나오는데 수정을 원하는 데이터를 작성해봅시다.

수정할 데이터를 위와 같이 json 데이터 형태로 작성하고 PUT 버튼을 눌러줍니다.

요청이 제대로 간 것을 볼 수 있습니다.

6. MySQL에 데이터 수정되었는지 확인

그렇다면 MySQL 데이터베이스 상에 있는 데이터가 수정되었는지 확인해보겠습니다.

기존에는 위와 같으 데이터가

이렇게 변한 것을 볼 수 있습니다. hoshiumi의 첫문자가 대문자로 바뀌어 Hoshiumi가 된 것을 볼 수 있습니다.

7. 데이터 불러와서 확인

웹 브라우저에서 다음 주소로 API를 요청해 데이터가 잘 수정되었는지 확인해보겠습니다.

http://127.0.0.1:8000/test/test01datas/