1. 리소스
리소스는 URI로 식별한다.
Collection : 복수의 element
Element : 하나하나의 데이터
2. REST
Representational State Transfer
- 자원(Resource): URI
- 행위(Verb): HTTP Method
- 표현(Representations)
3. HTTP Method
REST를 지키면서 행위를 전달하는 방법
patch는 부분 수정이 가능하지만 put은 전체 데이터를 입력받아 덮어쓰므로 전송하지 않은 데이터는 삭제한다.
팀프로젝트 진행사항
프로필 수정기능을 구현해봤다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>
<title>수정하기</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
</script>
<style>
.container {
justify-content: center;
margin: auto;
width: 50%;
padding: 4rem;
}
</style>
</head>
<body>
<div class="container">
<form action="/update/{{ member['_id'] }}" method="post">
<div class>
<div class="input-group mb-3">
<label class="input-group-text" for="size">사진</label>
<input name="img_give" type="url" class="form-control" />
</div>
<div class="input-group mb-3">
<span class="input-group-text">이름</span>
<input name="name_give" value="{{ member['name']}}" class="form-control" />
</div>
<div class="input-group mb-3">
<span class="input-group-text">블로그 주소</span>
<input name="blog_give" value="{{ member['blog']}}" class="form-control" />
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="size">MBTI</label>
<input name="mbti_give" value="{{ member['mbti']}}" type="text" class="form-control" />
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="size">장점</label>
<input name="merit_give" value="{{ member['merit']}}" type="text" class="form-control" />
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="size">자기소개</label>
<input name="desc_give" value="{{ member['desc']}}" type="text" class="form-control" />
</div>
</div>
<div class="d-flex justify-content-around">
<button type="submit" class="btn btn-light">수정</button>
<a href="/view/{{ member_id['_id'] }}"><button class="btn btn-light">취소</button></a>
</div>
</form>
</div>
</body>
</html>
#수정
@app.route("/update/<id>", methods=["GET"])
def update_get(id):
find_member = db.members.find_one({"_id": ObjectId(id)})
find_member['_id'] = str(find_member['_id'])
find_id = db.members.find_one({'_id' : ObjectId(id)},{'id':True})
return render_template('update.html', member=find_member, member_id=find_id)
@app.route("/update/<id>", methods=["POST"])
def update_post(id):
name_receive = request.form['name_give']
blog_receive = request.form['blog_give']
mbti_receive = request.form['mbti_give']
img_receive = request.form['img_give']
desc_receive = request.form['desc_give']
merit_receive = request.form['merit_give']
find_member = db.members.find_one({"_id": ObjectId(id)})
find_member['_id'] = str(find_member['_id'])
db.members.update_one({'_id': ObjectId(id)},{'$set':{'name':name_receive}})
db.members.update_one({'_id': ObjectId(id)},{'$set':{'blog':blog_receive}})
db.members.update_one({'_id': ObjectId(id)},{'$set':{'mbti':mbti_receive}})
db.members.update_one({'_id': ObjectId(id)},{'$set':{'img':img_receive}})
db.members.update_one({'_id': ObjectId(id)},{'$set':{'desc':desc_receive}})
db.members.update_one({'_id': ObjectId(id)},{'$set':{'merit':merit_receive}})
return redirect('/view/'+id)
put 방식을 이용해 업데이트 기능을 구현해보고 싶었는데 form에서는 put을 지원하지 않아 post방식으로 구현했다. 다른 방법을 생각해봐야 될 것 같다.
'TIL > WEEK1' 카테고리의 다른 글
WEEK 1. 드디어 첫 프로젝트 끝! (0) | 2023.05.19 |
---|---|
WEEK1. POST와 PUT의 차이점 (0) | 2023.05.18 |
WEEK1. PUT방식으로 수정기능 구현 (0) | 2023.05.17 |
WEEK1. Git (0) | 2023.05.15 |