안녕하세요. 이번 시간에는 django의 Filefield들에 쓰는 upload_to에 대해 간단하게 알아보겠습니다. 문서도 같이 보면 좋겠습니다. 먼저, item_file_path 함수를 보겠습니다. instance와 filename 2개를 받습니다. instance는 생성된 레코드의 id입니다. 그리고, filename은 파일의 이름을 의미합니다. 문서의 표를 참고하시면 됩니다. 이 두 정보를 받아서 리턴하는 값은 item/{레코드_id}/{파일이름}이 됩니다. 다음 11번째 줄입니다. id와 file을 입력으로 받습니다. id라는 필드를 추가해 주었는데요. 왜 추가했는지는 밑에서 후술하겠습니다. 이제, 파일을 업로드 해 보겠습니다. 파일 선택을 한 다음에 SAVE를 눌러보겠습니다. 데이터베이스에 저..
웹/장고 검색 결과
안녕하세요. 이번 시간에는 settings.py에 작성하는 MEDIA_ROOT와 MEDIA_URL을 어디에 쓰는지 알아보겠습니다. 먼저, Post에 ImageField를 추가했어요. ImageField를 사용하기 위해서는 Piliow를 설치해야 합니다. 이는 장고가 이미지 field를 validation 할 때 piliow를 쓰기 때문입니다. 이제 post 테이블을 보면 image가 VARCHAR로 있음을 알 수 있는데요. 직감하셨겠지만, 이 필드는 경로를 저장합니다. 실제 파일은 이 경로값을 읽어온 다음에 파일로 접근하게 됩니다. 이제, 새로운 포스트 하나 만들고 1.jpg를 이미지로 해 보겠습니다. 그러면, 제 프로젝트 root 폴더에 1.jpg가 올라가 있음을 볼 수 있는데요. 사실 이는 원하는 방..
debug=True로 세팅하고 admin page를 켜 보면 잘 켜집니다. 그런데 production 환경에서 debug 옵션을 True로 줄 리는 없을 겁니다. debug=False로 세팅하는 경우 몇 가지 세팅을 하셔야 하는데요. ALLOWED_HOSTS와 CORS_ALLOWED_ORIGINS 세팅을 해 주셔아 합니다. 먼저 django-cors-headers를 설치 후에 아래와 같은 설정을 해 주었습니다. ALLOWED_HOSTS에 "localhost"를 넣었습니다. 다음에 "corsheaders.middleware.CorsMiddleware"를 CommonMiddleware 위에 넣었습니다. 다음에, CORS_ALLOWED_ORIGINS에 "http://localhost:8000"을 추가해 주었습..
이번 시간에는 django의 include에 대해 알아봅시다. 장고 프로그램이 커지면 여러 domain을 정의해야 하는 경우가 있어요. 예를 들어, post라던지, account와 같은 것들이 이에 속할 겁니다. 이것들을 하나의 app에서 관리하면 너무 비대해 질 것 같습니다. 그래서, 이를 나눠보도록 하겠습니다. 먼저 project의 루트에는 djangoex 패키지가 있어요. 이 안에는 app, djangoex가 있는데요. djangoex 밑에 settings.py가 있는 구조입니다. 저는 루트의 djangoex 밑에서 startapp 명령어를 이용해서 posts app을 시작해 보겠습니다. 그러면, posts는 위와 같이 생성됩니다. 이제 domain 별로 url을 관리해 봅시다. 먼저, instal..
django에서 블로그를 생성할 때 기본 포스트가 생성되게 하고 싶습니다. 혹은, 아이디를 만들 때 포스트가 새로 만들어지게 하고 싶습니다. 이럴 때 어떻게 하면 좋을까요? view 단에서 user가 만들어지면 처리하게 할 수도 있겠습니다만, signal 등으로 처리하는 것도 나쁘지 않은 선택입니다. 다만, 공식 문서에서는 warning에 이해하기 힘든 로직이 작성될 수 있다고 하는데요. 레코드가 추가되는 부분하고, 그럴 때 발생하는 signal을 처리하는 부분이 분리가 되어 있다 보니 그러지 않나 싶습니다. 사실 linux에서 sigaction을 써 보셨다면 공감하실 수도 있을 듯 합니다. 그럼에도 불구하고, 저는 생각보다 유용하게 써먹었습니다. 그래서, 이번 시간에는 signal을 알아보도록 하겠습니..
최근댓글