[django] query/url parameter

CHOI YUN HO·2021년 8월 31일

1. query parameter

HTTP request안에 request.GET 그리고 request.POST 객체로 쿼리 딕셔너리를 가질 수 있다.

# [views.py] 

	try:
            queryset = Event.objects.all().order_by('-event_id')
            order_by = request.GET.get('order_by', None)
            if order_by == 'hits':
                queryset = Event.objects.all().order_by('-event_views')
            return JsonResponse({'status' : 200, 'event_list': list(queryset.values())}, status = 200)
        except KeyError:
            return JsonResponse({"status": 400, "message" : "Invalid Value"}, status = 400)           

뷰 클래스에 위와 같이 설정하고 파라미터 키:밸류 값으로
order_by : "hits"
와 같이 GET요청을 주면

장고의 request.GET 에는 <QueryDict: {'order_by': ['hits'], }>가 들어온다.

테스트할 때 파라미터를 꼭 넣어줘야 한다.

2. url parameter

# [views.py]

class DetailEvent(generics.RetrieveUpdateDestroyAPIView):
    queryset = Event.objects.all()
    serializer_class = EventSerializer

# [urls.py]

urlpatterns = [
    path('event/<int:pk>/',views.DetailEvent.as_view()),
    ...
]

url 파라미터는 뷰클래스 함수에서 self와 request외에 다른 인자를 가지게 되며 그 인자값이 엔드포인트가 되고 위처럼 urls 파일에 반영을 해줘야 한다.

localhost:8000/event/1
위와 같이 테스트 할 때 따로 파라미터를 설정하지 않고
url에 바로 반영하여 테스트하면 된다.

url 파라미터는 인자가 없으면 안되고 인자값으로 확실한 구분이 가능한 경우(특정 상품의 정보 등)에 주로 사용하며
쿼리 파라미터는 검색과 같이 여러개의 조건이 결합될 때 주로 사용된다.

profile
가재같은 사람

0개의 댓글