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)