* custom validate๋ฅผ http method๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ค์ ํ๊ณ ์ถ์๋
๐งฉ ์ ์ฉ ์์
# serializers.py
user_serializer = UserSerializer(request.user, context = {"request": request}).data
# views.py
try:
http_method = self.context.get("request", {}).method # POST
except:
http_method = ''
if http_method == "POST":
* write_only = True, read_only = True
์ ์ฅํ๊ณ ์ถ์ ํ๋์ ๋ณด๋ด๊ณ ์ถ์ ํ๋๊ฐ ๋ค๋ฅด๋ฉด ์๋ฆฌ์ผ๋ผ์ด์ ๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ์ง ์์๋ ๋๊ณ , ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ๋๋ค.
* field required ์ค๋ฅํด๊ฒฐ
Serializer feilds์์ ์ง์ ํด์ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ํ์๊ฐ ์๋๋ฐ, ๊ฐ์ด ์๋ค๊ณ ์ค๋ฅ๋ฅผ ๋ฑ๋๊ฒฝ์ฐ,
๐งฉ ์ ์ฉ ์์
user_serializer = UserSerializer(user, data=request.data, partial=True)
'partial=True' ๋ฅผ ์ถ๊ฐํด์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ถ๋ถ๋ง ๋ฐ์๋ ๊ฐ๋ฅํ์ฑ๋ก ํด๊ฒฐํด ๋ณผ ์ ์๋ค.
* read_only / status code
join_date์ ๊ฐ์ ๊ณ์ ์์ฑ์ผ์๋ผ๋๊ฐ ํ๋ ๋ถ๋ถ์ ๊ฐ์ด ์๋์ ์ผ๋ก ๊ณ ์ (auto_now_add=True)๋๊ธฐ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ค์ ํ ์ ์์ด์ read only๋ก ์ค์ ํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
status code๊ฐ์ ๊ฒฝ์ฐ๋ ํ๋ก ํธ์๋์์ ์ฒ๋ฆฌํ ์์ ์ด ๋ฌ๋ผ์ง๊ธฐ๋๋ฌธ์ ์๋์ ๊ฐ์ด status์์ ์ ํด์ฃผ์ด์ผํ๋ค.
๐งฉ ์ ์ฉ ์์
def get(self, request):
today = datetime.now()
products = ProductModel.objects.filter(
Q(post_start_date__lte=today, post_end_date__gte=today, is_active=True) |
Q(user=request.user)
)
return Response(ProductSerializer(products, many=True).data, status=status.HTTP_200_OK)
def post(self, request):
request.data['author'] = request.user.id
product_serializer = ProductSerializer(data=request.data)
if product_serializer.is_valid():
product_serializer.save()
return Response(product_serializer.data, status=status.HTTP_200_OK)
return Response(product_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, obj_id):
product = ProductModel.objects.get(id=obj_id)
product_serializer = ProductSerializer(product, data=request.data, partial=True)
if product_serializer.is_valid():
product_serializer.save()
return Response(product_serializer.data, statu=status.HTTP_200_OK)
return Response(product_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Django ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ณต์ตํ๋ ๊ฒ์ ์ด์ ์ ํ์ตํ ๊ฒ์ ๋ฆฌ๋ง์ธ๋ํ๊ณ ๋ถ๋ถ๋ถ๋ถ ๋ถ์กฑํ๋ ์ง์์ ์์ ์ ์๋ ์ข์ ์๊ฐ์ด์๋ค. ํ ๋ฒ ๊ฐ์ ๋ฃ๋๋ค๊ณ ํด์ ๋ฐ๋ก ์์๋ฃ๋ ๊ฒ์ ์ฒ์ฌ๋ค์๊ฒ๋ ๊ฐ๋ฅํ ์ผ์ด๊ธฐ๋๋ฌธ์ ๋ค์ณ์ ธ์๋ค๊ณ ์๊ฐ๋ง๊ณ ๊พธ์คํ๊ฒ ๊ณต๋ถํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค.
๐ ์์ธํ ์ฝ๋๋ Moonmoo ์ ๊ฒ์ํ์ต๋๋ค