본문 바로가기
DEV/Web 개발

Web 개발 :: 머신러닝 프로젝트_TIL#35

by 올커 2022. 10. 23.

■ 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 %}

 

 

반응형

댓글