개발기록장

[Django] Path parameter와 Query parameter 본문

TIL/Django

[Django] Path parameter와 Query parameter

yangahh 2021. 2. 28. 23:21

RestfulAPI 설계에 유용한 Path parameter와 Query parameter를 Django에서 사용하는 방법


1. Path parameter

Path parameter는 api url에 지정된 데이터 타입의 변수를 넘겨주고 해당 url를 처리하는 View에서 이 변수를 받아서 활용할 수 있다. 

 

- urls.py 예시

from django.urls   import path
from product.views import ProductDetailView

urlpatterns = [
    path('/product/<int:product_id>', ProductDetailView.as_view()),
]

url에서 int 타입의 product_id를 받아서 이를 처리할 ProductDetailView로 넘겨준다.

 

 

- views.py 예시

from django.views import View
from .models      import Product


class ProductDetailView(View):
	def get(self, request, product_id):
    
    	...(생략)...
      
        product = Product.objects.get(id=product_id)
        

get 메소드의 파라미터로 product_id를 받는다.

 

 

2. Query parameter

Django에서는 HTTP request의 request.GET 객체로 query parameter를 받을 수 있다.

 

- query parameter 엔드포인트 예시

GET /product?category=drink&sort=-price

이렇게 http request을 보내면

django에서는 {'category' : 'drink', 'sort': '-price'}로 query dictionary 를 받는다.

 

 

- 프론트엔드에서 api를 호출할 때 (React ver)

fetch(`http://localhost:8000/product?category=${category}`, {
  method: 'GET',
  
  ...(생략)...
  
})

 

- urls.py 예시

from django.urls   import path
from product.views import ProductListView

urlpatterns = [
    path('/product', ProductListView.as_view()),
]

 

 

- views.py 예시

from django.views import View
from .models      import Category, Product

class ProductListView(View):
	def get(self, request):
    	category_name = request.GET.get('category', None)
        
        ...(생략)...
        
        category = Category.objects.get(name=category_name)
        
        

 

 

3. Path parameter와 Query parameter의 적절한 사용은?

Path parameter나 Query parameter 모두 uri로 파라이터를 준다는 것은 동일하다. 

그렇다면 언제 어떤 방법을 사용하는게 적절할까?

 

Query parameter 방식은 이름에서도 알 수 있듯이 주로 filterign, sorting, searching에 사용하는게 적합하다.

정답이 있는 것은 아니지만, restful하게 설계한다면 용도에 맞게 쓰는 것이 좋다.