728x90
요약 : 공식문서가 답이다!!!!!
CHECKLIST
- restful한 api 설계를 할 수 있다.
- 미디어 파일과 스태틱 파일에 대해 이해한다.
- 게시글 모델과 조회/업로드를 위한 serializer를 만들 수 있다.
- 이미지를 포함한 게시글 기능을 개발할 수 있다.
- 포스트맨으로 백엔드 개발을 하면서 테스팅을 할 수 있다.
- drf에서 댓글 기능을 개발할 수 있다.
- drf에서 좋아요 기능을 개발할 수 있다.
- drf에서 follow 기능을 개발할 수 있다.
- many-to-many 관계를 설정하는 경우와 방법, 그리고 related_name의 사용방법을 이해한다.
1. RESTFUL한 API 설계
내용이 너무 많아서 일단 메인페이지를 예시로.
# Urls.py
from django.urls import path
from articles import views
urlpatterns = [
path('', views.ArticleView.as_view(), name='Article_View'),
]
# 경로 설정 확실하게 해주기,
# 필요한 것 import 확실하게 해주기
# 형식 : path('경로/', 파이썬파일.함수.as_view(), name=''),
# views.py
class ArticleView(APIView):
def get(self, request):
articles = Article.objects.all()
selializer = ArticleListSerializer(articles, many=True)
return Response(selializer.data, status=status.HTTP_200_OK)
def post(self, request):
if not request.user.is_authenticated:
return Response("로그인이 필요합니다.", status=status.HTTP_401_UNAUTHORIZED)
serializer = ArticleCreateSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# 클래스형 views.py
# 함수명은 데이터에 대한 그 함수의 성격에 따라 설정
# 유저가 유효하지 않을 경우(자동 로그아웃 시) 다시 로그인 요구
# 시리얼라이저가 유효하지 않으면(if serializer.is_valid()이 아닐 시) 저장 불가능
# status=status.HTTP__
# models.py
from django.db import models
from users.models import User
from django.urls import reverse
# Create your models here.
class Article(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
# 1대 다수
title = models.CharField(max_length=50)
content = models.TextField()
image = models.ImageField(blank=True, upload_to='%Y/%m')
# upload_to에 따라 media 폴더 안에 날짜에 맞는 폴더가 따로 생긴다.
# m은 month, M은 minute이니 주의할 것
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.title)
def get_absolute_url(self):
return reverse('detail_view', kwargs={'article_id': self.id})
# model 저장할 때 table 명시
# models.py 업데이트 하면 반드시 migrate 작업
# def __str__(self)는 화면에 드러내는 테이블(하이퍼링크?)을 설정해주는 것(여기서는 제목을 드러냄)
# get_absolute_url(self)는 아직 완전히 이해하진 못함.. kwargs 설명해주실 분 도와주세요ㅠ
2. 미디어 파일과 스태틱 파일에 대해 이해한다.
imagefield를 쓸 때는 이미지를 사용하는 설치파일(pip install pillow) 다운로드 필수
pip를 하면 반드시 pip freeze > requirements.txt 필수
# 공식문서 참조
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
settings.py와 프로젝트/urls.py를 손 많이 대야 함.
MEDIA 파일은 개발 단계에서 사용
STATIC 파일은 배포 단계에서 사용
생성 날짜에 따라 또 MEDIA 내부에서 폴더를 생성하는데 이 원리는 아직 잘 모르겠음.. 폴더 찾는 중
3. 게시글 모델과 조회/업로드를 위한 serializer를 만들 수 있다.
# views.py
class ArticleView(APIView):
def get(self, request):
articles = Article.objects.all()
selializer = ArticleListSerializer(articles, many=True)
return Response(selializer.data, status=status.HTTP_200_OK)
# serializers.py
class ArticleListSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
likes_count = serializers.SerializerMethodField()
comments_count= serializers.SerializerMethodField()
def get_user(self, obj):
return obj.user.email
def get_likes_count(self, obj):
return obj.likes.count()
def get_comments_count(self, obj):
return obj.comments.count()
class Meta:
model = Article
fields = ['pk', 'title','image', 'updated_at',"user",'likes_count','comments_count']
# 화면에 보이는 것들을 시리얼라이징을 통해 내보임.
# 모델에 저장한 것들을 class meta를 통해 가져오는 건가?
5. many-to-many 관계를 설정하는 경우와 방법, 그리고 related_name의 사용방법을 이해한다.
many to many는 한 사람이 여러 팔로워를 보는 경우, 마찬가지로 다른 사람도 여러 팔로워를 보는 경우에 해당
>> 모두가 one to many가 가능할 때를 many to many로 본다.
변수명 = models.ManyToManyField("self", symmetrical=False, related_name="필드에 연관있는 모델명", blank=True)
나머지는 너무 장황하고 그냥 실습하는 체크리스트라 패스!
'Framework > Django' 카테고리의 다른 글
Poetry 설치 및 기초 세팅 (0) | 2023.06.07 |
---|---|
데이터 관계 모델 정리 (2) | 2023.05.18 |
DRF 심화과정 3주차 (0) | 2023.04.23 |
장고 심화 1주차 (8) | 2023.04.18 |
VS code 오류[갑자기 가상환경이 작동하지 않는다!] (0) | 2023.04.11 |