DRF ์ฌํ๊ณผ์ 2๋ฒ์งธ ๊ณผ์ ..
์..
wa..
๋ชจ๋ธ๋ง๋ถํฐ ์๋ฆฌ์ผ ์ฌ์ฉ๋ฒ๊ณผ ์๋ฆฌ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํ views.py ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๊น์ง..
ํ๊ธฐ์ ์ด๋ฉด์ ๊ฐํธํ์ง๋ง
์์ง๊น์ง๋ ์ต์ํ์ง ๋ชปํ ๊ทธ๊ฒ..
DRF ๋ ๋์ฒด ๋ญ์ผ... ใ
5์ผ์ฐจ
1. product๋ผ๋ ์ฑ์ ์๋ก ์์ฑํด์ฃผ์ธ์
- ์์ฑํ๋ฉด settings.py ๋ ์ถ๊ฐ
python manage.py startapp product
2. product ์ฑ์์ <์์ฑ์, ์ ๋ชฉ, ์ธ๋ค์ผ, ์ค๋ช
, ๋ฑ๋ก์ผ์, ๋
ธ์ถ ์์ ์ผ, ๋
ธ์ถ ์ข
๋ฃ์ผ>๊ฐ ํฌํจ๋ product ํ
์ด๋ธ์ ์์ฑํด์ฃผ์ธ์
class Product(models.Model):
user = models.ForeignKey('user.User', verbose_name="์์ฑ์", on_delete=models.CASCADE)
title = models.CharField(verbose_name="์ ๋ชฉ", max_length=50)
thumbnail = models.FileField("์ธ๋ค์ผ", upload_to="product/")
description = models.TextField("์ค๋ช
")
created = models.DateTimeField("๋ฑ๋ก์ผ์", auto_now_add=True)
exposure_start_date = models.DateField("๋
ธ์ถ ์์ ์ผ", default=timezone.now)
exposure_end_date = models.DateField("๋
ธ์ถ ์ข
๋ฃ ์ผ", default=timezone.now)
def __str__(self):
return f"์ ๋ชฉ : {self.title}"
3. django serializer์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ validate / create / update ๊ธฐ๋ฅ์ ์ฌ์ฉํด event ํ
์ด๋ธ์ ์์ฑ/์์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ฃผ์ธ์
* postman์ผ๋ก ํ์ผ์ ์
๋ก๋ ํ ๋๋ raw ๋์ form-data๋ฅผ ์ฌ์ฉํ๊ณ , Key type์ File๋ก ์ค์ ํด์ฃผ์ธ์
- ์๋ฆฌ์ผ ์ธํ
์ด ๋์๋ค๋ฉด ๊ผญ ์๋ฆฌ์ผ์์ ๋ถ๋ฌ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ์.
class ProductView(APIView):
permission_classes = [IsAdminOrAuthenticatedReadOnly]
# validate
def get(self, request):
today = datetime.now()
products = ProductModel.objects.filter(
Q(exposure_start_date__lte = today, exposure_end_date__gte = today,) |
Q(user=request.user)
)
serializerd_data = ProductSerializer(products, many=True).data
return Response(serializerd_data, status=status.HTTP_200_OK)
# create
#validator validator(์
์ฆํ๋ค) ์ค์
def post(self, request):
'''
ํญ์ ์ ์ ์ ๊ฐ์ ๋ถ๋ฌ์จ๋ค.
user = request.user ๋๋ฌธ์ ์ด ๊ตฌ๋ฌธ์ ํ์๊ฐ ์์
request.user ์ ์ ๋ณด๋ฅผ request.data ์ user id ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๊ณผ์
'''
request.data['user'] = request.user.id
# product ์ serializer ๋ฐ์ดํฐ ๊ฐ์ ๋์
๋๋ฆฌ๋ก ๋๊ฒจ์ค๋ค.
product_serializer = ProductSerializer(data=request.data)
# valid() ์
์ฆ์ด ์๋์์ ๊ฒฝ์ฐ return False ๋ก ๋๊ฒจ์ค๋ค. (๊ฒ์ฆ๊ณผ์ )
if product_serializer.is_valid():
# validator ๋ฅผ ํต๊ณผํ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ์ฅ / .is_valid() ๊ฐ ํต๊ณผ๊ฐ ๋๋ ๊ฒฝ์ฐ์๋ง ์ ์ฅ ๊ฐ๋ฅ
product_serializer.save()
# return ์ผ๋ก ์๋ฆฌ์ผ ๋ฐ์ดํฐ ๋ณด๋ด์ฃผ๊ธฐ
return Response(product_serializer.data, status=status.HTTP_200_OK)
'''
ํต๊ณผ๋ฅผ ๋ชปํ ๊ฒฝ์ฐ
.error ์๋ validator์ ์คํจํ ํ๋์ ์คํจ ์ฌ์ ๊ฐ ๋ด๊ฒจ ์๋ค.
'''
return Response(product_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# update
def put(self, request, product_id):
product = ProductModel.objects.get(id=product_id)
'''
์์ productmodels id ๋ฐ์ดํฐ๋ฅผ ์๋ฆฌ์ผ๋ก ๋ถ๋ฌ์ค๊ณ productserializer ๋ก ๋ค์ request.data ๋ก ์
๋ฐ์ดํธ ํ๋ค.
partial ๋ ์ผ๋ถ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
'''
product_serializer = ProductSerializer(product, data=request.data, partial=True)
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)
4. ๋ฑ๋ก๋ ์ด๋ฒคํธ ์ค ํ์ฌ ์๊ฐ์ด ๋
ธ์ถ ์์ ์ผ๊ณผ ๋
ธ์ถ ์ข
๋ฃ ์ผ์ ์ฌ์ด์ ์๊ฑฐ๋, ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์๊ฐ ์์ฑํ product ์ฟผ๋ฆฌ์
์ ์ง๋ ฌํ ํด์ ๋ฆฌํดํด์ฃผ๋ serializer๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = ProductModel
# Product field ์ค์
fields = [
'user', 'title', 'thumbnail', 'description',
'created', 'exposure_start_date', 'exposure_end_date',
]
5. product field๋ฅผ admin์์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋ฑ๋กํด์ฃผ์ธ์
from product.models import Product as ProductModel
# Register your models here.
admin.site.register(ProductModel)