2023. 1. 13. 10:26ㆍTOY_PROJECT
토이프로젝트를 진행하며, 혜민님의 도움을 받아 가장 기본적인 설계부터 진행했다.
Create 생성
Read 읽기
Update 갱신
Delete 삭제
기능을 먼저 구현하기 위해 app.py코드를 채워나갔다.
# 링크 생성 Create
@app.route("/api/link", methods=["POST"])
def link_post():
POST라는 methods를 사용해서 /api/link를 통해 연결한다.
link_post()라고 정의한 내용이다.
# id 값 만들기
all_list = list(db.links.find({}, {'_id': False}))
id = len(all_list) + 1
title = request.form['title']
url = request.form['url']
tag = request.form['tag']
author = request.form['author']
all_list는 _id 내용을 제외한 값을 db의 links에서 찾는다.
id는 all_list의 길이 에서 1을 더한 값을 부여한다.
title은 'title'을 요청한다.
url은 'url'을 요청한다.
tag는 'tag'을 요청한다.
author는 'author'을 요청한다.
''가 포함되지 않은 글자는 백엔드에서 해당 값을 위치시키는 이름이고
''가 포함된 글자는 html에서 부여한 id="title"을 뜻한다.
js에서 title, url, tag, author에 해당 되는 내용을 저장할 수 있게 기능을 구현했고, 이를 그대로 가져온 것이다.
# 파일 저장을 위한 부분
image = request.files['image']
image_path = save_file(image)
이는 파일 저장을 위한 부분이며, 텍스트가 아닌 파일이기에 request.files를 활용해 이미지 파일을 불러왔고, save_file을 활용해 저장할 수 있게 했다.
doc = {
'id': id,
'title': title,
'url': url,
'tag': tag,
'author': author,
'image': image_path
}
db.links.insert_one(doc)
return jsonify({'msg': '링크 등록 완료!'}), 201
insert_one()을 이용해 원하는 곳에 저장했다.
프론트엔드에서 알 수 있도록 메세지도 띄워줬다.
또한 201을 입력해 리소스가 저장됨을 알려줬다.
# 파일 업로드
def save_file(image):
# 파일 확장자 분리
extension = image.filename.split('.')[-1]
save_file로 정의했고 image만 따로 분리하여 저장할 수 있게 ()값을 (image)로 부여했다.
split('.')[-1]을 이용해 filename을 지우고 확장자 이름만 가져올 수 있게 했다.
# 파일 이름 형식
today = datetime.now()
mytime = today.strftime('%Y-%m-%d-%H-%M-%S')
filename = f'file-{mytime}'
save_to = f'static/img/{filename}.{extension}'
백엔드에서 관리하기 위해 시간 정보를 추가로 부여하기로 했고
datetime.now로 현재 시간을 가져왔다.
strftime을 이용 년, 월, 일, 시, 분, 초를 가져왔다.
filename은 f-string을 활용해 file-시간 정보를 더한 값을 부여한다.
save_to는 static폴더의 img폴더에 filename.extension값을 부여한 정보로 저장한다.
# 파일 로컬 static/img 디렉토리 저장
image.save(save_to)
file_fullname = f'{filename}.{extension}'
return file_fullname
filename.extension 형식의 이름으로 이미지를 저장한다.
'TOY_PROJECT' 카테고리의 다른 글
Read (0) | 2023.01.13 |
---|---|
ajax (0) | 2023.01.13 |
Toy_project #1 (0) | 2023.01.10 |