코딩일지/TIL: Today I Learned

20221026 TIL

야언 2022. 10. 26. 19:35

오늘의 배운 것

  • 장고 심화 - 4주차

 

장고 심화 강의 프로젝트

 

https://github.com/didjsrne/drf_project

 

GitHub - didjsrne/drf_project

Contribute to didjsrne/drf_project development by creating an account on GitHub.

github.com

 

 

** 이미지 파일 넣기 - ImageField

 

https://docs.djangoproject.com/en/4.1/ref/models/fields/#django.db.models.ImageField

 

Model field reference | Django documentation | Django

Django The web framework for perfectionists with deadlines. Toggle theme (current theme: auto) Toggle theme (current theme: light) Toggle theme (current theme: dark) Toggle Light / Dark / Auto color theme Overview Download Documentation News Community Code

docs.djangoproject.com

FileField의 속성을 상속, 업로드된 파일이 이미지인지 추가적으로 확인하는 필드

 

Pillow 모듈 필요

pip install Pillow

 

 

settings.py 에 파일 경로 설정

STATIC_ROOT = BASE_DIR / "static"
STATIC_URL = "/static/"

MEDIA_ROOT = BASE_DIR / "media"
MEDIA_URL = "/media/"

 

urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

SNS, 사물인식 프로젝트때는 다른 팀원님이 사용해서 눈으로 훑고 지나갔던 이미지 필드 추가에 대해 처음부터 짚고 넘어가니까 확실히 느낌이 더 확실하게 다가오는 느낌이다.

 

 

 

 

 

 

 

트러블슈팅

 

articles - serializers.py

from rest_framework import serializers
from articles.models import Article, Comment

class ArticleSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()
    
    def get_user(self, obj):
        return obj.user.email
    
    class Meta:
        model = Article
        fields = '__all__'
        
        
class ArticleCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ("title", "image", "content")
        

class ArticleListSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()
    
    def get_user(self, obj):
        return obj.user.email
    
    class Meta:
        model = Article
        fields = ("pk", "title", "image", "updated_at", "user")
        
        
class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = '__all__'
        
class CommentCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = ("content",)  # 하나만 넣어도 ,(콤마) 무조건!

 

SerializerMethodField와 get_user 함수를 통해 user_id로 표시되는 항목을 email로 표시하는것 ok

 

사용자 id를 구분하기 위해 fields를 '__all__'에서 원하는 필드만 솎아내는게 아직 이해가 좀 덜 된것 같다..

이렇게 했을때 정확히 어떻게 달라지는지 찾아보면 좋을듯