http method 종류
- get : 조회
- post : 생성
- put : 수정
- delete : 삭제
FBV vs CBV
FBV : Function Base View
CBV : Class Base View
FBV
def user(request):
if request.method == 'post':
pass
if request.method == 'get':
pass
CBV
from rest_framework.views import APIView
from rest_framework import permissions
from rest_framework.response import Response
class UserView(APIView):
#권한 설정
#모두 #추가 설정을 안하면 default값이다
permission_classes = [permissions.AllowAny]
#로그인한 사람만
permission_classes = [permissions.IsAuthenticated]
#admin만
permission_classes = [permissions.IsAdminUser]
def get(self, request):
#그전까지는 하단의 render를 많이 사용하였으나 이제는
return render("~.html", {'data': 'userdata~'}
#response를 사용할것
return Response({'message':'get method!'})
def post(self, request):
return Response({'message':'post method!'})
def put(self, request):
return Response({'message':'put method!'})
def delete(self, request):
return Response({'message':'delete method!'})
이제 urls.py에서
from django.contrib import admin
from django.urls import path
from user import views
urlpatterns = [
path('', views.UserView.as_view())
]
를 해주는데 CBV는 as_view()를 무조건 붙쳐줘야한다.
참조 Django 공식 문서 - https://docs.djangoproject.com/en/4.0/topics/class-based-views/
Class-based views | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
만약 IsAuthenticated를 했는데 로그인 안하고 실행하면
{
"detail": "Authentication credentials were not provided."
}
하단과 같은 에러를 Postman에서 볼 수 있다.
Using PostMan
Postman 실행
1. WorkSpace 프로젝트마다의 독립된 공간으로 팀원들간 공유가 가능하다. New Workspace를 통해 만들 수 있다. 2. Collections 세부 카테고리를 정하는 곳 add request를 통해 'GET 사용자 조회' 와 같은 api를..
softl.tistory.com
object&queryset
- object : 테이블에 입력 된 특정 레코드
- queryset : object의 집합 ex) [object(1), object(2), object(3)]
Model.objects.get(id=obj_id) # => return object
Model.objects.filter(date=datetime.today()) # => return queryset
데이터 추가, 조회, 삭제, 수정하기
# 추가1
model = Model(
field1="value1",
field2="value2"
)
model.save()
# 추가2
Model.objects.create(
field1="value1",
field2="value2"
)
# 조회
Model.objects.all()
Model.objects.filter()
Model.objects.get()
# 수정1
model = Model.object.get(id=obj_id)
model.field = value
model.save()
# 수정2
Model.objects.filter(field__contains=value).update(
field1="value1",
field2="value2"
)
# 삭제
Model.objects.filter(field="value").delete()
Model.objects.get(id=obj_id).delete()
자주 사용하는 패턴
# objects.get에서 객체가 존재하지 않을 경우 DoesNotExist Exception 발생
try:
Model.objects.get(id=obj_id)
except Model.DoesNotExist:
# some event
return Response("존재하지 않는 오브젝트입니다.")
# -join_date처럼 "-"를 붙이면 역순으로 정렬
# .order_by("?")사용시 무작위 셔플
Model.objects.all().order_by("join_date")
# queryset에서 첫번째 object를 가져옴. all()[0]과 동일
Model.objects.all().first()
# 입력한 object가 존재 할 경우 해당 object를 가져오고, 존재하지 않을 경우 새로 생성
object, created = Model.objects.get_or_create(
field1="value1",
field2="value2",
)
if created:
# created event
else:
# already exist event
'Django > Django Rest Framework' 카테고리의 다른 글
10. Django DRF 로그인 구현 (0) | 2022.06.19 |
---|---|
9. Django DRF custom user 생성 (0) | 2022.06.19 |
7. Django DRF on_delete, DateField (0) | 2022.06.18 |
1. Django DRF VScode settings (0) | 2022.06.18 |
6. Django DRF 프로젝트 구조에 대한 이해 (0) | 2022.06.18 |