Skip to main content

Command Palette

Search for a command to run...

drf를 사용해서 CRUD 구현

Updated
•2 min read•View as Markdown
drf를 사용해서 CRUD 구현

permission_classes = [IsAuthenticated] 대신 사용 가능한것

인증된 사용자에게만 허용되는 것

1
self.permission_classes = [IsAuthenticated]

이걸 쓰면 이 부분만 허용된다.

2

permission_classes = [IsAuthenticatedOrReadOnly]

이 권한은 API에서 익명 사용자에게 읽기 권한을 허용하고 인증된 사용자에게 쓰기 권한만 허용하려는 경우에 적합하다.
즉 「IsAuthenticatedOrReadOnly」을 써주면 get은 할 수 있으며
post, put, delete의 관계없이 전부다 인증 된 사용자에게만 액세스를 허용한다.


models.py

from django.conf import settings
from django.db import models
from accounts.models import User


class Product(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=120)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    # author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    image = models.ImageField()

    def __str__(self):
        return str(self.title)

urls.py

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    path('', views.ProductView.as_view(), name='products'),
    path('<int:pk>/', views.ProductDetailAPIView.as_view(), name='update'),
] 
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

views.py

from django.shortcuts import get_object_or_404, render
from rest_framework.views import APIView
from products.models import Product
from products.serializers import ProductSerializer
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly



# 상품 등록, 목록 조회
class ProductView(APIView):
    permission_classes = [IsAuthenticatedOrReadOnly]

    # 상품 등록 이미지 업로드 질문
    def get(self, request):
        products = Product.objects.all()
        serializer = ProductSerializer(products, many=True)
        return Response(serializer.data)

    def post(self, request):
        self.permission_classes = [IsAuthenticated]
        serializer = ProductSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response(serializer.data,status=status.HTTP_201_CREATED)


# 상품 수정, 삭제
class ProductDetailAPIView(APIView):
    permission_classes = [IsAuthenticated]

    def get_object(self, pk):
        return get_object_or_404(Product, pk=pk)

    def put(self, request, pk):
        products = self.get_object(pk)
        serializer = ProductSerializer(products, data=request.data, partial=True)    # partial 부분적 수정을 가능하게 해준다.
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response(serializer.data)

    def delete(self, request, pk):
        product = self.get_object(pk)
        product.delete()
        return Response(status=status.HTTP_200_OK)

POSTMAN

게시글 등록

pk값으로 받아올 때

상품 목록 조회

게시글 수정

게시글 삭제

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts