Day 7 Django for KN

김의석 ·2024년 2월 14일

Django

목록 보기
7/39

Django for KN(Koinonia)

  • 해당 문서는 사귐의 교회 청소년부 출석부 프로젝트를 위한 Django 학습 내용과 개발 과정을 기록함

requirements.txt

  • requirements.txt 를 사용하여 Django project에 필요한 라이브러리 설치하기
    • requirements.txt 에 설치 필요한 라이브러리 이름 및 버젼을 작성
      • Django~=3.0.0
      • Pillow
  • 터미널에서 pip install -r requirements.txt 명령어 실행
  • 사용하는 라이브러리가 특정 version을 요구한다면을 지정하여 작성할 것

Makemigration과 Migrate의 의미

python3 manage.py makemigrations [app name]
  • models.py의 내용 수정 후 migration 파일을 생성하는 명령어
python3 manage.py migrate [app name]
  • 수정 내용을 실제 DB에 적용하는 명령어

Media file을 위한 ImageField 생성 및 settings.py 설정

class Post(models.Model):
	photo = models.ImageField(blank=True) 
    # ImageField 사용시 pillow 설치 필수(참고)
  • Models.py에서 models.imagefield를 통해 생성
# project의 settings.py

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

STATIC_URL = 'static/'

MEDIA_URL = 'media/' # 웹에서 첨부 파일 접근 시 url로 사용.
MEDIA_ROOT = BASE_DIR/"media" # 첨부한 파일의 저장경로로 사용.
  • path(__file__) : __file__현재 .py file의 경로를 의미하며 Path class의 객체가 됨
  • MEDIA_URL
  • MEDIA_ROOT : 기본 경로인 BASE_DIR을 기준으로 첨부 파일의 저장 경로를 지정.
# Project의 urls.py

from django.contrib import admin
from django.urls import path, include

from django.conf.urls.static import static
from django.conf import settings
# media setting의 위해 추가 import 됨
# global_settions에 from poko import settings가 overwrite 하여 사용 됨.

urlpatterns = [
    path('admin/', admin.site.urls), 
    path('instagram/', include('instagram.urls')),
    path('checking/', include('checking.urls')),
    
]

# settings.py에서 설정한 MEDIA_URL / settings.MEDIA_ROOT의 사용
if settings.DEBUG: # 디버깅 True(실행)인 경우에
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • Project의 urls.py에서 media file setting 적용하기
  • Static(정적 파일) : 일반적으로 CSS, JavaScript, 이미지 파일 등과 같이 소스 코드가 실행되지 않고 고정된 내용을 가지고 있는 파일들을 말합니다.
class Post(models.Model):
photo = models.ImageField(upload_to='instagram/post/%Y/%m/%d')
  • upload_to 옵션
    • 첨부한 이미지를 Y/m/d별로 폴더를 자동 생성하여 저장 및 관리를 가능하게 함
    • 함수로 경로를 지정할 경우, 중간 디렉토리 경로 및 파일 명 까지 결정 가능(추후 내용 확인 필요)
# instagram views.py

from django.shortcuts import render
from .models import Post

def post_list(request): # 함수호출 당시 모든 요청 url을 인자로 받겠다.
    qs = Post.objects.all()
    q = request.GET.get('q', '')
    if q:
        qs = qs.filter(message__icontains=q)
    return render(request, 'instagram/post_list.html', {
        'post_list': qs, 'q':q,
        })
  {% if post.photo %}
	<img src="{{ post.photo.url }}" style="width: 100px;"/>
  {% else %}
    No Photo
  {% endif %}
  • 처리 순서 : views.py -> HTML Templates
  • post.photo.url의 urlsetting.Media_URL과 조합되어 처리
  • ImageField에 저장된 파일및 경로가 없을 경우 url 계산 실패 반드시 필드명 저장유무 체크
profile
널리 이롭게

0개의 댓글