- 사용자가 업로드 한 파일들을 보관할 디렉토리의 절대 경로
- django는 성능을 위해 업로드 파일은 데이터베이스에 저장하지 ㅇ낳음
- 실제 데이터베이스에 저장되는 것은 파일의 경로
- MEDIA_ROOT와 STATIC_ROOT는 다른 경로여야함
- MEDIA_ROOT에서 제공되는 미디어를 처리하는 URL
- 업로드 된 파일의 주소(URL)를 만들어 주는 역할
- 웹 서버 사용자가 사용하는 public URL
- 비어 있지 않은 값으로 설정 한다면 반드시 slash(/)로 끝나야 함
- MEDIA_URL의 STATIC_URL과 반드시 다른 경로로 지정해야 함
개발 단계에서 사용자가 업로드 한 파일 제공하기
- settings.MEDIA_URL
- settings.MEDIA_ROOT
- MEDIA_URL을 통해 참조하는 파일의 실제 위치
https://docs.djangoproject.com/ko/4.0/howto/static-files/
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('articles/', include('articles.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
이미지 업로드 (CRAETE)
- create.html에서 form에 enctype 속성 지정
<form action="" method="POST" enctype="multipart/form-data">
이미지 수정하기
- 이미지는 바이너리 데이터이기 때문에 텍스트처럼 일부만 수정 하는 것은 불가능
- 때문에 새로운 사진으로 덮어씌우는 방식을 사용
이미지 크기 변경하기
- 실제 원본 이미지를 서버에 그대로 업로드 하는 것은 서버의 부담이 큰 작업
- 태그에서 직접 사이즈를 조정할 수도 있지만, 업로들 될 때 이미지 자체를 resizing 하는 것을 고려하기
- django imagekit 사용
https://github.com/matthewwithanm/django-imagekit
from django.db import models
from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill
class Profile(models.Model):
image = ProcessedImageField(
blank=True,
upload_to='thumbnails/',
processors=[Thumbnail(200, 300)],
format='JPEG',
options={'quality': 60})
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
View decorators
- Django는 다양한 HTTP 기능을 지원하기 위해 view함수에 적용할 수 있는 여러 데코레이터를 제공
- 어떤 함수에 기능을 추가하고 싶을 때, 해당 함수를 수정하지 않고 기능을 연장 해주는 함수
- 즉, 원본 함수를 수정하지 않으면서 추가 기능을 구현할 때 사용
- Allowed HTTP methods
- 요청 메소드에 따라 view 함수에 대한 엑세스를 제한
- 요청이 조건을 충족시키지 못하면 HttpResponseNotAllowed을 return (405 Method Not Allowed)
- require_http_method(), require_POST(), require_safe(),
- require_http_methods()
- view함수가 특정한 method 요청에 대해서만 허용하도록 하는 데코레이터
- require_post()
- view함수가 POST method 요청만 승인하도록 하는 데코레이터
- require_safe()
- view함수가 GET 및 HEAD method만 허용하도록 요구하는 데코레이터
- django는 require_GET 대신 require_safe를 사용하는 것을 권장