๐Ÿ‘€ ์žฅ๊ณ  ํŽ˜์ด์ง€๋„ค์ด์…˜

may_soouuยท2020๋…„ 10์›” 4์ผ
3

Django

๋ชฉ๋ก ๋ณด๊ธฐ
9/9

ํ”„๋ก ํŠธ + ๋ฐฑ์—”๋“œ ์†Œํ†ต์„ ํ•˜๋ฉด์„œ ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ํŽ˜์ด์ง€๋ณ„๋กœ ๋‚˜๋ˆ ์„œ GETํ•˜๋Š” ํŽ˜์ด์ง•๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋‚ด์žฅ๋œ ๋ชจ๋“ˆ์ธ Paginator ์„ Import ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ,
limit + offset ์„ ํ™œ์šฉํ•ด์„œ ์ ์šฉํ–ˆ๋‹ค.

์ „์ฒด ์ƒํ’ˆ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” views.py๋ฅผ ์˜ˆ๋กœ ๋ณด์ž

def get(self, request):
        order_method = int(request.GET.get('sort_method', None))
        limit        = int(request.GET.get('limit', 0))
        offset       = int(request.GET.get('offset', 0))

limit๊ณผ offset์€ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ›๋Š”๋‹ค.
limit : ํ•œ ํŽ˜์ด์ง€์— ๋ช‡ ๊ฐœ๋ฅผ ๋ณด์—ฌ์ค„ ๊ฑด์ง€,
offset : ์‹œ์ž‘๋˜๋Š” ๋ฒˆํ˜ธ

ํ”„๋ก ํŠธ์™€ ํ•จ๊ป˜ ์ง„ํ–‰ํ–ˆ๋˜ ํด๋ก  ํ”„๋กœ์ ํŠธ์— ์ ์šฉ์„ ํ•ด๋ดค๋‹ค.
ํ”„๋ก ํŠธ์—์„œ limit๊ณผ offset ๊ฐ’์„ ์ •ํ•ด์„œ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋ƒˆ๊ณ ,
๋‚˜๋Š” ๊ทธ ๊ฐ’์„ ์œ„์™€ ๊ฐ™์ด ์šฐ์„  ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ›์•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฟŒ๋ ค์ฃผ๋Š” views.py์—์„œ
limit / offset์ด ์—†์„ ๋•Œ,

 if order_method   == 0:
        product_all  = Products.objects.all()
 elif order_method == 1:
        product_all  = Products.objects.order_by('price')
 elif order_method == 2:
        product_all  = Products.objects.order_by('-price')

sort_method๋กœ ํ•„ํ„ฐ ์ •๋ ฌ์„ ์œ„ํ•ด order_by๋ฅผ ์จ์„œ ์ •๋ ฌํ–ˆ๋‹ค.
limit / offset์„ ์“ด๋‹ค๋ฉด,

if order_method   == 0:
      product_all   = Products.objects.all()[offset:offset+limit]
elif order_method == 1:
      product_all   = Products.objects.order_by('price')[offset:offset+limit]
elif order_method == 2:
      product_all   = Products.objects.order_by('-price')[offset:offset+limit]

๋์— [offset:offset+limit]๋ฅผ ๋ถ™์—ฌ์„œ ์ธ๋ฑ์Šค ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
๋งŒ์•ฝ, 1๋ฒˆ ํŽ˜์ด์ง€๋ผ๋ฉด 0:19๊นŒ์ง€, 2๋ฒˆ ํŽ˜์ด์ง€๋ผ๋ฉด 20:39 ๊นŒ์ง€!


๋งŒ์•ฝ ํ”„๋ก ํŠธ์—์„œ limist ๊ณผ offset์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ
์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๊ฐ’์œผ๋กœ ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •ํ•ด์„œ ํ”„๋ก ํŠธ๋กœ ์ „๋‹ฌํ•  ๋•Œ๋Š”

page_size    = 20
      limit_        = int(page_size * page)
      offset_       = int(limit - page_size)
      all_product  = Products.objects.all()[offset:limit]

์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ๊ณ„์‚ฐํ•ด์„œ ๋ณด๋‚ด์ฃผ๋ฉด ๋œ๋‹ค.

profile
back-end ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€