■ JITHub 개발일지 35일차
□ TIL(Today I Learned) ::
Django 머신러닝 웹 개발 프로젝트 :: 디저트 추천 프로젝트
10/21에는 머신러닝 프로젝트를 종합하여 정리하고 최종 마무리를 진행하였다.
최종 정리 전 마지막날 밤에는 아래 4가지 정도의 문제점을 확인했다.
1) 문제점 : 어떤 문제가 있었는지?
- 프로젝트에서 머신러닝을 담당하는 모듈이 되는 파일의 경로지정 문제로 동작하지 않는 경우 발생
2) 몰랐던 점 : 모르는 것은 무엇이었는지? (+내가 했던 시도)
- 그냥 단순하게 파일이 있는 위치에서 경로를 받아오려 했으나 지속 실패함. 상대경로가 아니라 절대경로로 바꿔와야 하나해서 바꾸어보았지만 실행되지 않았다.
3) 해결 및 알게된 점
- 직접 python 파일명.py로 테스트할 때와 django를 활용하여 템플릿에서 form을 통해 해당 모듈을 실행할 때에는 어떤 위치에서 해당 모듈을 불러오는지 인지해야 한다.
- 장고에서 로드할 때에는 manage.py의 위치를 기준으로 해당 모듈이 어디에 있는지 참고하여 로드해야 한다.
(1) 임시로 학습된 모델을 테스트할 때
test_img = cv2.imread('../../media/' + str(img_url))
(2) 장고에서 로드하여 함수 내에서 사용될 때
test_img = cv2.imread('./media/' + str(img_url))
1) 문제점 : 어떤 문제가 있었는지?
- 깃허브에 업로드 전 django 시크릿키를 별도 지정해야 하는 문제
2) 몰랐던 점 : 모르는 것은 무엇이었는지? (+내가 했던 시도)
- 시크릿키를 다른 파일에 입력 후 사용할 곳에서 경로참조로 가져와야 하지만 자주 잊는 부분
3) 해결 및 알게된 점
- 시크릿키를 따로 json 파일로 저장해두고 settings.py에서 해당 json파일을 읽어오는 로직을 만들어야 한다.
- 시크릿키 이외에 이메일 또는 소셜로그인시 가져올 정보들은 이렇게 별도로 저장하여 로드하고, .gitignore를 통해 공유되지 않도록 항상 신경써야 한다.
(1) 시크릿키 json 파일
{
"SECRET_KEY": "본인의 고유 비밀 키 추가"
}
(2) settings.py
import os, json
from django.core.exceptions import ImproperlyConfigured
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
1) 문제점 : 어떤 문제가 있었는지?
- POST 형식으로 이미지 파일을 사용자로부터 업로드 받아야 하는데, submit 이후 확인해보면 빈 셀인 경우가 발생함
2) 몰랐던 점 : 모르는 것은 무엇이었는지? (+내가 했던 시도)
- post로 파일을 차곡차곡 DB에 쌓는경우 무지성으로 request.POST.get을 사용한 점
3) 해결 및 알게된 점
- 이미지나 파일을 업로드할 때에는 request.POST가 아닌 request.FILES를 사용하여 업로드하면 이미지가 지정된 경로에 저장되면서 해당 경로를 DB에 저장하게 된다.
1) 문제점 : 어떤 문제가 있었는지?
- 템플릿에서 동일한 작업에서 for문을 3회 돌리고 싶었는데 기존에 알고 있던 파이썬 구문으로 실행이 되지 않음
ex) {% for i in range(3) %} 으로 하였으나 오류 발생
2) 몰랐던 점 : 모르는 것은 무엇이었는지? (+내가 했던 시도)
- 장고를 통해 html에서 템플릿함수를 사용할 때 무조건 파이썬과 동일하게 사용할 수 있겠다는 착각
3) 해결 : 어떻게 해결했는지?
- 아래와 같이 템플릿 함수를 변경하여 사용할 수 있었다.
- for문에서 in 이후에 문자열이나 list형식이 들어오고, 해당 리스트를 |ljust: 이후의 숫자를 돌면서 for문을 반복한다.
{% for i in ""|ljust:3 %}
'DEV > Web 개발' 카테고리의 다른 글
Web 개발 :: 파이썬 Django Rest Framework(1) _ 프로젝트 세팅, 모델 Serializer, CRUD 기능 구현 (0) | 2022.10.25 |
---|---|
Web 개발 :: HTTP와 웹의 동작 방식 (1) | 2022.10.24 |
Sparkling Coffee Club :: 머신러닝 웹 개발 프로젝트 KPT 회고록 (0) | 2022.10.21 |
Web 개발 :: 머신러닝 프로젝트_TIL#34 (0) | 2022.10.20 |
Web 개발 :: 머신러닝 프로젝트 SA_TIL#33 (0) | 2022.10.20 |
댓글