์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- topic
- backfill
- Spark SQL
- Kafka
- DataFrame Hint
- KDT_TIL
- ๋น ๋ฐ์ดํฐ
- redshift
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- AQE
- Airflow
- Kubernetes
- Spark Caching
- spark executor memory
- Docker
- off heap memory
- CI/CD
- k8s
- Spark
- Dag
- aws
- disk spill
- colab
- Spark Partitioning
- Spark ์ค์ต
- Salting
- Speculative Execution
- SQL
- etl
- mysql
- Today
- Total
JUST DO IT!
[TIL]KDT_20230426 ๋ณธ๋ฌธ
๐ KDT WEEK 4 DAY 2 TIL
- Serializer
- ModelSerializer
- HTTP Methods
- GET
- POST
- PUT, DELETE
- APIView
๐ฅ Serializer
๋ค์์ ๋ ๊ธฐ๋ฅ์ ์ํํ๋ ๊ธฐ๋ฅ
Serialize : ๋ชจ๋ธ ์ธ์คํด์ค๋ QuerySet ๋ฐ์ดํฐ๋ฅผ JSON ํ์์ ํ์ผ๋ก ๋ณํํ๋ ์์
Deserialize : JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ ์ธ์คํด์ค๋ก ๋ณํํ๋ ์์
๋ค์๋งํด, Serializer๋ ์ฐ๋ฆฌ๊ฐ Django์์ ์ฌ์ฉํ๋ ํ์ด์ฌ ๊ฐ์ฒด๋ ์ฟผ๋ฆฌ์ ๊ฐ์ด ๋ณต์กํ ๊ฐ์ฒด๋ค์ Rest API์์ ์ฌ์ฉํ ๊ฐ๋จํ JSON ํํ๋ก ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค!
Rest API : ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ(CRUD)
DRF : Django REST Framework
Question ๋ชจ๋ธ Serializer ๊ตฌํํ๊ธฐ
polls_api/serializer.py
from rest_framework import serializers
from polls.models import Question
class QuestionSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True) # read_only๋ฅผ ๋ฃ์ด ์๋์ผ๋ก ์์ฑ๋๋ ์์ฑ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง๋ฆ
question_text = serializers.CharField(max_length=200)
pub_date = serializers.DateTimeField(read_only=True)
def create(self, validated_data): # validated์ธ ์ด์ ๋ serializer๊ฐ is_valid()๋ฅผ ๋จผ์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ
return Question.objects.create(**validated_data)
# id์ pub_date๋ ์๋์ผ๋ก ์์ฑ๋๋ฏ๋ก question_text๋ง ์์ฑํ๋ฉด ๋๋ค.
def update(self, instance, validated_data):
instance.question_text = validated_data.get('question_text', instance.question_text)
instance.save()
return instance
- ๋ชจ๋ธ์์ ์์ฑ์ ์ ์ํ๋ ๊ฒ์ฒ๋ผ ํ์ ์ ๋ง๋ ํ๋์ ์ ํ ์กฐ๊ฑด์ ์ ์ด์ผ ํ๋ค.
- serializer๋ ๋์ด์จ data๊ฐ ์ ํ ์กฐ๊ฑด ๋ฑ์ ๋ง์กฑํ๋์ง๋ฅผ ํญ์ ๋จผ์ ์ฒดํฌํ๊ธฐ ์ํด .is_valid()๋ฅผ ๋์ํด์ผํ๋ค.
- ์ด ๋ถ๋ถ์ ๋ฐ์์ ๋ ์ค๋ช ํ๊ฒ ๋ค.
- ์๋์ผ๋ก ์์ฑ๋๋ ์์ฑ์ ์ ํ ์กฐ๊ฑด์ read_only ์กฐ๊ฑด์ ๊ผญ ๋ช ์ํด์ผ ํ๋ค.
์ด๊ฑธ Shell์์ ์ค์ ๋ก Serializer๊ฐ ๋์ํ๋์ง ์ฒดํฌํด๋ดค๋ค.
๋จผ์ ๋ฐ์ดํฐ ํ๋๋ฅผ Serialize ํด๋ณด๋ ์ค์ต์ด๋ค.
# ๊ด๋ จ ํจ์๋ฅผ ๋ชจ๋ importํ๊ณ , q๋ Question์ ํ ์ค๋ธ์ ํธ๋ผ๊ณ ๊ฐ์ ํ๋ค.
>>> q
<Question: ์ ๋ชฉ: ํด๊ฐ๋ฅผ ์ด๋์ ๋ณด๋ด๊ณ ์ถ์ผ์ธ์?, ๋ ์ง: 2023-04-24 08:15:31+00:00>
>>> serializer = QuestionSerializer(q)
>>> serializer.data
{'id': 1, 'question_text': 'ํด๊ฐ๋ฅผ ์ด๋์ ๋ณด๋ด๊ณ ์ถ์ผ์ธ์?', 'pub_date': '2023-04-24T08:15:31Z'}
>>> json_str = JSONRenderer().render(serializer.data)
>>> json_str
b'{"id":1,"question_text":"\xed\x9c\xb4\xea\xb0\x80\xeb\xa5\xbc \xec\x96\xb4\xeb\x94\x94\xec\x84\x9c \xeb\xb3\xb4\xeb\x82\xb4\xea\xb3\xa0 \xec\x8b\xb6\xec\x9c\xbc\xec\x84\xb8\xec\x9a\x94?","pub_date":"2023-04-24T08:15:31Z"}'
์๊น ์์ฑํ๋ QuestionSerializer๋ฅผ ํตํด ์ค๋ธ์ ํธ q๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด, Dict ํ์ ์ ๋ฐ์ดํฐ๊ฐ ๋์จ๋ค. > JSON ํ์
JSONRenderer๋ก ์ด serializer ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๋ฉด, ์ปดํจํฐ์ ์ ์ฅํ ์ ์๋ ํ์ ์ธ string ํํ๋ก ๋ฐ๋์ด์ง๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ Serialize ์ํ์ด๋ค!
๋ค์์ผ๋ก Deserialize์ ์ํํด๋ณด๋ฉด..
>>> import json
>>> data = json.loads(json_str)
>>> data
{'id': 1, 'question_text': 'ํด๊ฐ๋ฅผ ์ด๋์ ๋ณด๋ด๊ณ ์ถ์ผ์ธ์?', 'pub_date': '2023-04-24T08:15:31Z'}
>>> serializer = QuestionSerializer(data=data)
>>> serializer.is_valid()
True
>>> serializer.validated_data
OrderedDict([('question_text', 'ํด๊ฐ๋ฅผ ์ด๋์ ๋ณด๋ด๊ณ ์ถ์ผ์ธ์?')])
>>> new_question = serializer.save() # Create
>>> new_question
<Question: ์ ๋ชฉ: ํด๊ฐ๋ฅผ ์ด๋์ ๋ณด๋ด๊ณ ์ถ์ผ์ธ์?, ๋ ์ง: 2023-04-24 08:15:31+00:00>
>>> data={'question_text': '์ ๋ชฉ์์ '}
>>> serializer = QuestionSerializer(new_question, data=data)
>>> serializer.is_valid()
True
>>> serializer.save() # Update
<Question: ์ ๋ชฉ: ์ ๋ชฉ์์ , ๋ ์ง: 2023-04-26 15:23:55+00:00>
- json.loads()๋ฅผ ์ฌ์ฉํ์ฌ string ํ์ ์ ๋ค์ json์ผ๋ก ๋ฐ๊ฟ ์ค ์ ์๋ค.
- QuestionSerializer์ ๋ฐ์ดํฐ ์ธ์๋ฅผ ํ๋ ๋ฃ๊ณ , is_valid()ํ์ง ๊ผญ ์ฒดํฌํด์ค์ผํ๋ค. (๊ทธ๋์ผ ๋ค์ ๋์์ด ๊ฐ๋ฅํ๋ค)
- serializer๋ ํน์ดํ๊ฒ ์ผ๋ฐ Dict ํํ๊ฐ ์๋, ์ ๋ ฅํ ์์๋๋ก ์ ์ฅํ๋ OrderedDict๋ฅผ ์ฌ์ฉํ๋ค.
- .save()์ ๊ฒฝ์ฐ, QuestionSerializer์ ์ธ์๋ก ๋ฌด์์ ๋ฐ์๋์ง์ ๋ฐ๋ผ Create์ Update์ ๊ตฌ๋ถํ๋ค!
- is_valid()์์ False๋ฅผ ๋ฐ์์ ๊ฒฝ์ฐ, serializer.errors๋ฅผ ์ ๋ ฅํ์ฌ ์ด๋ค ์๋ฌ์ธ์ง ์ ์ ์๋ค.
ModelSerializer
์์์ ๊ตฌํํ Serializer๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
from rest_framework import serializers
from polls.models import Question
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ['id', 'question_text', 'pub_date'] # ModelSerializer๋ฅผ ํตํด ์๋์ผ๋ก ์์ฑ
์๊น ๊ตฌํํ๋ ์ฝ๋๋ณด๋ค ํจ~์ฌ ๊ฐ๋จํ๊ณ ์ฝ๋ค.
ModelSerializer๋ฅผ ์์๋ฐ๊ณ , Meta ํด๋์ค์ ๊ตฌํํ Model๊ณผ ์์ฑ๋ค์ ์ ๋ ฅํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๋ฌผ๋ก ์๊น Shell์์์ ๋ช ๋ น์ด๋ฅผ ๋ชจ๋ ๋๊ฐ์ด ์ํํ๋ค.
๐ฆ HTTP Methods
์ฃผ์ด์ง ๋ฆฌ์์ค์ ๋ํด ์ํํ๊ธธ ์ํ๋ ํ๋์ ๊ณจ๋ผ ๋ณด๋ด์ผํ๋ค. ์ฌ๊ธฐ์ ๋ฆฌ์์ค๋ Question, Choice ๋ฑ์ ๋งํ๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ์์ ์ ์ฅ์์ ์ ํํด์ผ ํ๋ค!
- GET : ์ ๋ณด์ ํ๋ ,ํน์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ > READ
- POST : ์ด๋ค ์ ๋ณด๋ฅผ ์๋ฒ์ ๋๊น, ๋ฌด์ธ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ๋ ์ฐ์ผ ๋ > CREATE
- PUT : ๋ด์ฉ์ ์์ ์์ฒญ > UPDATE
- DELETE : ํน์ ๋ฆฌ์์ค์ ์ญ์
๋ ๋ง์ Methods๋ https://developer.mozilla.org/ko/docs/Web/HTTP/Methods ๋ฅผ ์ฐธ๊ณ
GET
๋จผ์ , views.py์ GET์ ๊ตฌํํด๋ณธ๋ค.
polls_api/views.py
from rest_framework.decorators import api_view
from polls.models import Question
from polls_api.serializers import QuestionSerializer
from rest_framework.response import Response
@api_view() # ๊ดํธ์์ด ๋น์ด์์ผ๋ฉด GET
def question_list(request):
questions = Question.objects.all()
serializer = QuestionSerializer(questions, many=True) # many ์ต์
์ ์ฃผ๋ฉด, questions์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ ์ค๋ธ์ ํธ๋ฅผ ์ค์์์
return Response(serializer.data)
@api_view ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌํ์ ์ฌ์ดํธ์ด๋ค. ๊ธฐ๋ณธ์ ์ธ ์น ์ธํฐํ์ด์ค๋ ๊ฐ์ง๊ณ ์๋ค.(DRF api)
views.py๋ฅผ ๊ตฌํํ์ผ๋ url์ ์ฐ๊ฒฐํด์ฃผ์ด์ผ ํ๋ค.
polls_api/urls.py์
๋ฅผ ์ถ๊ฐํ๊ณ ,
๊ฐ์ฅ ์์ urls.py์
๋ ์ถ๊ฐํด์ค๋ค.
์ด๋ ๊ฒ ์ ์ํด์ฃผ๋ฉด, http://127.0.0.1:8000/rest/question/ ๋ก ์ฐ๊ฒฐ๋ ์ ์์ ๊ฒ์ด๋ค!
POST
์๊น GET์ views.py ์ฝ๋์์ POST ๋ถ๋ถ๋ง ์ถ๊ฐํด์ฃผ์๋ค.
from rest_framework.decorators import api_view
from polls.models import Question
from polls_api.serializers import QuestionSerializer
from rest_framework.response import Response
from rest_framework import status # HTTP status
@api_view(['GET','POST']) # ์ด๋ฒ์ POST๋ ํ์ํ๋, ํ์ํ ๋ฐฉ์์ ๋ชจ๋ ์ ์ด์ค๋ค.
def question_list(request):
if request.method == 'GET': # ์ฌ์ฉํ ๋ฐฉ์์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๊ตฌ๋ถํ๋ค.
questions = Question.objects.all()
serializer = QuestionSerializer(questions, many = True)
return Response(serializer.data)
if request.method == 'POST':
serializer = QuestionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
ํฌ๊ฒ ๋ณํ ์ ์ ์๋ค.
api_view์ POST๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ๋ช ์ํ๊ณ , ์ฌ์ฉํ ๋ฐฉ์์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋๋์๋ค.
POST ๋ฐฉ์์์๋ request๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ํ ๋, ๊ทธ ๋ฐ์ดํฐ๋ฅผ ํตํด save ์์ ์ ํ๋ค.
์ถ๊ฐ๋ก Response๋ฅผ ํตํด HTTP status๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฒ๋ฆฌํด์ฃผ์๋ค.
PUT, DELETE
์ด๋ฒ์ ์๊น question/ ํ์ด์ง์์ ํด๋น id์ ๋ฒํธ๋ก ํด๋นํ๋ detail ํ์ด์ง๊น์ง ๊ตฌํํ๋ค.
from django.shortcuts import get_object_or_404
@api_view(['GET', 'PUT', 'DELETE']) # ์ ๋ณด์ ์กฐํ, ํธ์ง, ์ญ์ ๊ธฐ๋ฅ
def question_detail(request, id):
question = get_object_or_404(Question, pk=id) # primary key ๊ฐ id์ธ~
if request.method == 'GET':
serializer = QuestionSerializer(question)
return Response(serializer.data) # question id๋ก ์์ฒญ๋ฐ์ผ๋ฉด ๋ฐ์ดํฐ ๋ฑ๊ธฐ
if request.method == 'PUT':
serializer = QuestionSerializer(question, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
if request.method == 'DELETE':
question.delete()
return Response(status=status.HTTP_204_NO_CONTENT) # ๋ฐ์ดํฐ๊ฐ ์ ์ง์์ง 204
GET, POST์์ ๊ตฌํํ views.py์ ์ถ๊ฐํ ์ฝ๋๋ง ์์ฑํ์๋ค.
์๋ก์ด ํ์ด์ง๋ฅผ ์ํด ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค์์ ๋ฟ, POST์ ๋ฐฉ์์ ๋์ผํ๋ค.
๋จ, ๊ฐ๊ฐ์ HTTP Methods์ ๋์์ ๊ณ ๋ คํด์ QuestionSerializer์ ๋ฃ์ ์ธ์ ๋ฑ์ ์๊ฐํ๊ณ ๊ตฌํํด์ผ ํ๋ค.
+ ์ถ๊ฐ๋ก ํด๋น id๊ฐ ์์ ๋๋ฅผ ๋๋นํ get_object_or_404 ํจ์๋ก question์ ๊ฐ์ ธ์ค๋๋ก ๋ณ๊ฒฝํ์๋ค.
์๋ก์ด ํ์ด์ง๋ฅผ ์ํ ํจ์๋ฅผ ๋ง๋ค์์ผ๋ฏ๋ก, urls.py์ ์๋ก์ด path๋ฅผ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
๐จ APIView
๋ฐฉ๊ธ ๊ตฌํํ๋ HTTP Methods๋ฅผ ๋์ฑ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๋๋ก ์ง์ํ๋ ๊ธฐ๋ฅ์ด๋ค!
from rest_framework.views import APIView
# ๊ฐ HTTP Methods์ ํจ์๋ก ๊ตฌ๋ณํ์ฌ ๊ตฌํํ๋ค.
class QuestionList(APIView):
def get(self, request):
questions = Question.objects.all()
serializer = QuestionSerializer(questions, many=True)
return Response(serializer.data)
def post(self, request):
serializer = QuestionSerializer(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)
class QuestionDetail(APIView):
def get(self, request, id):
question = get_object_or_404(Question, pk=id) # primary key ๊ฐ id์ธ~
serializer = QuestionSerializer(question)
return Response(serializer.data) # question id๋ก ์์ฒญ๋ฐ์ผ๋ฉด ๋ฐ์ดํฐ ๋ฑ๊ธฐ
def put(self, request, id):
question = get_object_or_404(Question, pk=id)
serializer = QuestionSerializer(question, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
question = get_object_or_404(Question, pk=id)
question.delete()
return Response(status=status.HTTP_204_NO_CONTENT) # ๋ฐ์ดํฐ๊ฐ ์ ์ง์์ง 204
์๊น์๋ ๋ค๋ฅด๊ฒ ํด๋์ค๋ก ๊ตฌ๋ถํ์ฌ ๊ฐ Methods๋ฅผ ํจ์๋ก ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ด๋ค.
If ๋ฌธ์ผ๋ก ๋๋์ด ๊ตฌ๋ถํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ณด๊ธฐ์ ํธํ ๊ฒ ๊ฐ๋ค!
๋ ์ฝ๋๋ฅผ ๋น๊ตํด๋ณด๋ฉด ์๊ฒ ์ง๋ง, ๋ฐฉ์์ด ๋ค๋ฅผ ๋ฟ์ด์ง ์ฝ๋ ์์ฒด๋ ๊ฑฐ์ ๋น์ทํ๋ค.
ํ์ง๋ง ํจ์๊ฐ ์๋๋ผ ํด๋์ค๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์, urls.py์ path๋ฅผ ์์ ํด์ฃผ์ด์ผ ํ๋ค.
urlpatterns = [
path('question/', QuestionList.as_view(), name='question-list'),
path('question/<int:id>/', QuestionDetail.as_view(), name='question-detail'),
]
ํด๋์ค์ ๊ฒฝ์ฐ, <ํด๋์ค์ด๋ฆ>.as_view() ์ ๋ฐฉ์์ ์ฌ์ฉํด์ผํ๋ค!
Generics, mixins
๋ฐฉ๊ธ ๊ฒ๋ณด๋ค ๋ ์ฌ์ด ๊ตฌํ ๋ฐฉ๋ฒ์ด ์๋ค.
์ด์ ๋ APIView๊ฐ ์๋, generics์ mixins๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
from polls.models import Question
from polls_api.serializers import QuestionSerializer
from rest_framework import mixins, generics
class QuestionList(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class QuestionDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin,generics.GenericAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
์๊น๋ณด๋ค ๋ ๊ฐ๊ฒฐํด์ง๊ฒ ๋์ ๋ณด์ธ๋ค!
์ด ๋ถ๋ถ์ ์์๊ณผ ๊ฐ methods์ ์ธ์๋ง ์ฃผ์ํด์ฃผ๋ฉด ๋๋ค.
- .ListModelMixin : Queryset์ Listingํ๋ ๋ฏน์ค์ธ, ๋ฐ์ดํฐ๋ฅผ ๋ชฉ๋ก ๋ฆฌํดํ๋ค.
- .CreateModelMixin : ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ ์ฅํ๋ค.
- .RetrieveModelMixin : ์กด์ฌํ๋ ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํ๋ค(ํ๋)
- .UpdateModelMixin : ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ์์ ํ๋ค.
- .DestroyModelMixin : ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ์ญ์ ํ๋ค.
ํ์ง๋ง ์ด๊ฑธ ๊ธฐ์ต์ํด๋ ๋ ๋งํผ ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์๋ค..
Generic API View
from polls.models import Question
from polls_api.serializers import QuestionSerializer
from rest_framework import generics
class QuestionList(generics.ListCreateAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
class QuestionDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
generics๊ฐ ์ง์ํ๋ API view๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๋ฉด, ํจ์๊ณ ๋ญ๊ณ ๊ตฌํํ ํ์๊ฐ ์๋ค.
queryset์ ํ์ํ ๋ชจ๋ธ์ ๊ฐ์ฒด๋ค๊ณผ Serializer๋ง ์ ๊ตฌํํ์ฌ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
์๋ค๋ค๋ ์์๋ฐ์ APIView์ ๋ฐ๋ผ ์ง์ํด์ฃผ๋ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ๋ฐ, ์ด๊ฑด ์ด๋ฆ์ ์ ํ์ธํ๋ฉด ๊ธฐ๋ฅ์ ๊ตฌ๋ณํ ์ ์๋ค.
Ctrl + ํด๋ฆญ์ผ๋ก ํด๋น ํด๋์ค๋ฅผ ๋๋ฅด๋ฉด generics.py๋ฅผ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ํ์ํ ํด๋์ค๋ฅผ ์ฐพ์ ์์์์ผ์ฃผ๋ฉด ๋๋ค!
๐ค ๊ณต๋ถํ๋ฉด์ ์ด๋ ค์ ๋ ๋ด์ฉ
์์งํ Serializer๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ์ ๋ง ์๊ธฐ ์ด๋ ค์ ๋ค.
์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์๋ณด๋ฉฐ ๋์ถฉ ์ดํดํ ๊ฒ ๊ฐ๊ธดํ๋ฐ.. ๋๊ฐ ๋ฌผ์ด๋ณด๋ฉด ์์ ์๊ฒ ๋๋ต์ ๋ชปํ ๊ฒ ๊ฐ๋คใ ใ ใ ๐
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]KDT_20230428 (0) | 2023.04.28 |
---|---|
[TIL]KDT_20230427 (0) | 2023.04.27 |
[TIL]KDT_20230425 (0) | 2023.04.25 |
[TIL]KDT_20230424 (0) | 2023.04.24 |
[TIL]KDT_20230421 (0) | 2023.04.21 |