Django for KN(Koinonia)
- 해당 문서는 사귐의 교회 청소년부 출석부 프로젝트를 위한 Django 학습 내용과 개발 과정을 기록함
requirements.txt
- requirements.txt 를 사용하여 Django project에 필요한 라이브러리 설치하기
- requirements.txt 에 설치 필요한 라이브러리 이름 및 버젼을 작성
- 터미널에서 pip install -r requirements.txt 명령어 실행
- 사용하는 라이브러리가 특정 version을 요구한다면을 지정하여 작성할 것
Makemigration과 Migrate의 의미
python3 manage.py makemigrations [app name]
- models.py의 내용 수정 후 migration 파일을 생성하는 명령어
python3 manage.py migrate [app name]
class Post(models.Model):
photo = models.ImageField(blank=True)
- Models.py에서 models.imagefield를 통해 생성
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_URL = 'static/'
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR/"media"
- path(__file__) : __file__ 는 현재 .py file의 경로를 의미하며 Path class의 객체가 됨
- MEDIA_URL
- MEDIA_ROOT : 기본 경로인 BASE_DIR을 기준으로 첨부 파일의 저장 경로를 지정.
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('instagram/', include('instagram.urls')),
path('checking/', include('checking.urls')),
]
if settings.DEBUG:
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별로 폴더를 자동 생성하여 저장 및 관리를 가능하게 함
- 함수로 경로를 지정할 경우, 중간 디렉토리 경로 및 파일 명 까지 결정 가능(추후 내용 확인 필요)
from django.shortcuts import render
from .models import Post
def post_list(request):
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의 url은 setting.Media_URL과 조합되어 처리
- ImageField에 저장된 파일및 경로가 없을 경우 url 계산 실패 반드시 필드명 저장유무 체크