Django Media& View decorators

김동완·2022년 4월 13일
0

Django

목록 보기
13/25
post-thumbnail

MEDIA_ROOT

  • 사용자가 업로드 한 파일들을 보관할 디렉토리의 절대 경로
  • django는 성능을 위해 업로드 파일은 데이터베이스에 저장하지 ㅇ낳음
    • 실제 데이터베이스에 저장되는 것은 파일의 경로
  • MEDIA_ROOT와 STATIC_ROOT는 다른 경로여야함

MEDIA_URL

  • MEDIA_ROOT에서 제공되는 미디어를 처리하는 URL
  • 업로드 된 파일의 주소(URL)를 만들어 주는 역할
    • 웹 서버 사용자가 사용하는 public URL
  • 비어 있지 않은 값으로 설정 한다면 반드시 slash(/)로 끝나야 함
  • MEDIA_URL의 STATIC_URL과 반드시 다른 경로로 지정해야 함

개발 단계에서 사용자가 업로드 한 파일 제공하기

  • settings.MEDIA_URL
    • 업로드 된 파일의 URL
  • settings.MEDIA_ROOT
    • MEDIA_URL을 통해 참조하는 파일의 실제 위치

https://docs.djangoproject.com/ko/4.0/howto/static-files/

#urls.py
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">
  • form 태그 - enctype(인코딩)속성
    • multipart/form-data
      • 파일 이미지 업로드 시에 반드시 사용해야함 (전송되는 데이터의 형식을 지정)
      • \을 사용할 경우에 사용

이미지 수정하기

  • 이미지는 바이너리 데이터이기 때문에 텍스트처럼 일부만 수정 하는 것은 불가능
  • 때문에 새로운 사진으로 덮어씌우는 방식을 사용

이미지 크기 변경하기

  • 실제 원본 이미지를 서버에 그대로 업로드 하는 것은 서버의 부담이 큰 작업
  • 태그에서 직접 사이즈를 조정할 수도 있지만, 업로들 될 때 이미지 자체를 resizing 하는 것을 고려하기
  • django imagekit 사용

https://github.com/matthewwithanm/django-imagekit

#models.py
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를 사용하는 것을 권장
profile
내가 공부한 내용들이 누군가에게 도움이 될지 몰라서 쓰는 벨로그

0개의 댓글