student/api.py
class StudentDetail(APIView):
def get(self, request, student_id):
model = Student.objects.get(student_id=student_id)
serializer = StudentSerializer(model)
return Response(serializer.data)
rest_youtube_test/urls.py
에 경로 지정path('api/student_list/<int:student_id>', StudentDetail.as_view(),name='student_list'),
api.py
수정def put(self, request, student_id):
model = Student.objects.get(student_id = student_id)
serializer = StudentSerializer(model, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
post랑 비슷하지만 student_id로 해당되는 값만 뽑아져 나와서 수정이 가능하다
이 상태로 서버 들어가서 수정해보면 다른 필드도 필요하다고 뜨는데 아래와 같이 serializers.py를 수정하면 된다!
student/serializers.py
수정from rest_framework import serializers
from .models import Student
class StudentSerializer(serializers.ModelSerializer):
student_id = serializers.CharField(required=False)
name = serializers.CharField(required=False)
age = serializers.CharField(required=False)
class Meta:
model = Student
fields = '__all__'
student/api.py
def delete(self, request, student_id):
model = Student.objects.get(student_id=student_id)
model.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
아래는 강의외에 추가로 학습한 내용이다.
공식문서와 유튜브를 참고하면서 공부하다가 format suffix라는 걸 알게되었다. 전 게시글에서 resopnse가 하나의 컨텐츠 유형에 고정되지 않는다고 했는데 그럴 때 URL endpoint에 형식을 참조할 때 쉽게 할 수 있도록 하는 것으로 이해했다.
Format suffixes
웹 API의 일반적인 패턴은 URL에서 파일 이름 확장자를 사용하여 특정 미디어 유형에 대한 endpoint를 제공하는 것이다.
예를 들어, ‘http://example.com/api/users.json’은 JSON 표현을 제공한다.
API의 URLconf에 있는 각 개별 항목에 형식 접미사 패턴을 추가하는 것은 오류가 발생하기 쉽다. 추가 URL 패턴을 반드시 추가 할 필요는 없지만, 특정 형식을 참조하는 간단하고 깔끔한 방법을 제공하는 것이다.
format_suffix_patterns
urlpatterns = format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None)
arguments
urlpatterns
: 필수이며 URL 패턴 목록suffix_required
: 선택사항이며 URL의 접미사를 옵션으로 하는지, 필수로 하는지를 나타내는 boolean이다. Default 값은 False이다.allowed
: 선택사항이며 유효한 형식 접미사의 list 또는 tuple이다. 제공되지 않으면 와일드 카드 형식 접미사 패턴이 사용된다.그런데 format_suffix_patterns를 사용하는 경우, 'format'키워드를 view에 추가해야한다.
def snippet_list(request, format=None):
class-bassed view는 다음과 같이 추가한다.
class CommentList(APIView):
def get(self, request, format=None):
사용 된 kwarg의 이름은 FORMAT_SUFFIX_KWARG설정을 사용하여 수정할 수있다. format_suffix_patterns는 includeURL 패턴으로 내림차순을 지원하지 않는다.
유튜브는 CBV로 작성되었다. DRF 공식문서는 처음에 FBV로 시작하는데, CBV로 리팩토링 하는 과정이 있는데 거기서 GenericAPIView를 사용하는 것이 나오면서 알게된 개념이다. 공식문서를 따라가다 이해가 안가서 아래 블로그 글을 보니까 매우 자세히 정리되어있다.
근데 아직 GeneicAPIView를 사용해 구현을 해보지 않아서 감이 안온다....... (추후 정리하도록 하겠다.)
<구현하기 전 정리할 것>