Routing(라우팅)
서버로 들어온 요청에 맞는 리소스나 페이지로 요청을 이동시키는 것이다.
Routing 방법들
1. path 사용
path("경로", Viewset)
from django.urls import path
urlpatterns = [
path("/path", ViewSet.as_view()),
]
2. router 사용
router.register("경로", Viewset)
from rest_framework import routers
router = routers.SimpleRouter()
router.register(r"path", ViewSet)
urlpatterns = router.urls
3. @action decorator 사용
path, router과는 조금 다른 방법으로, 기본적인 url mapping을 따르지 않거나, view의 역할이 기본적인 CRUD가 아닐 때, 또는 추가적인 permission 등을 지정하고 싶을 때 사용한다.
class TempViewSet(ModelViewSet):
@action(methods=['post'], detail=True, permission_classes=[IsAdminOnly], url_path="tempapi")
def temp_view(self, request):
...
methods: 해당 view에 접근 가능한 http method를 리스트 형식으로 지정한다.
detail: 해당 view가 모델 개별 인스턴스에 대한 정보를 다루는지, 모델 전체 인스턴스들에 대한 정보를 다루는지를 boolean 값으로 표현한다.
permission_classes: 해당 view에 어떤 permission 클래스에 해당해야 접근할 수 있는지를 리스트 형식으로 지정한다.
url_path: @action을 사용하는 경우 보통 url 경로는 메소드의 이름으로 정해진다. 만약 url 경로를 메소드의 이름과 다르게 설정하고 싶다면 설정해주면 된다.
Router: SimpleRouter와 DefaultRouter
1. 차이점
- DefaultRouter는 프로젝트의 모든 url이 전부 명시되어 있는 기본 페이지를 제공한다.
- DefaultRouter는 api를 제공할 때 .json 형식으로도 제공한다.
2. url path, http method, action에 따라 url을 mapping 하는 방식
url style | http method | action |
기본 path/ | GET | LIST |
기본 path/ | POST | CREATE |
기본 path/해당 url path/ | 지정 X | @action(detail=False) |
기본 path/pk/ | GET | RETRIEVE |
기본 path/pk/ | PUT | UPDATE |
기본 path/pk/ | PATCH | PARTIAL-UPDATE |
기본 path/pk/ | DELETE | DESTROY |
기본 path/pk/해당 url path/ | 지정 X | @action(detail=True) |
+
또한 django에서 제공하는 router들은 기본적으로 모든 url 뒤에 '/'를 붙이는 것이 기본이다.
그러나 router를 선언할 때 trailing_slash 옵션을 False로 선언하면 url의 맨 뒤에 '/'가 붙지 않도록 할 수 있다.
router = routers.SimpleRouter(trailing_slash=False)
'server-side > Django' 카테고리의 다른 글
django sessions (0) | 2024.01.06 |
---|---|
django migrations (0) | 2023.12.31 |
django apps (0) | 2023.12.20 |
models and databases (0) | 2023.09.16 |
python - poetry 사용하기 (0) | 2023.07.12 |