Django-rest-framework: viewset lookup_field url conf์—์„œ ์ œ์™ธ๋œ ์  ๋ฌธ์ž

์— ๋งŒ๋“  2014๋…„ 11์›” 06์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: encode/django-rest-framework

djangorestframework==2.3.13 ์™€ djangorestframework==2.4.4 ์‚ฌ์ด์˜ ์–ด๋”˜๊ฐ€์—์„œ ModelViewSet์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ url conf๊ฐ€ '.'๋ฅผ ์ œ์™ธํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋งˆ์นจํ‘œ/์ ) ๋ฌธ์ž. ์ฆ‰, ์‚ฌ์šฉ์ž ์ •์˜ lookup_field๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋˜๋Š” ์ด ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ทฐ ์„ธํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

class ZoneViewSet(viewsets.ModelViewSet):
    lookup_field = 'domain__name'

๋‹ค์Œ URL์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค( djangorestframework==2.3.13 ).

^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']

๊ทธ๋ฆฌ๊ณ  ์ด์ œ djangorestframework==2.4.4 ์™€ ํ•จ๊ป˜ :

^api/ ^v1/ ^zones//$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']

[^] ๋Š” ์ œ์™ธ ์„ธํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฏ€๋กœ [^/] ๋ชจ๋“  ์Šฌ๋ž˜์‹œ๋ฅผ ์ œ์™ธํ•˜๊ณ  [^/.] ์Šฌ๋ž˜์‹œ ๋ฐ ๋งˆ์นจํ‘œ(์ ) ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

URI์˜ ๋งˆ์นจํ‘œ๋ฅผ ์ œํ•œํ•  ์ด์œ ๊ฐ€ ์—†์œผ๋ฉฐ ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ ค์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์€ ์ด ์ด์ „ ๊ธฐ๋Šฅ์„ ๊นจ๋œจ๋ฆฐ ์ปค๋ฐ‹์ž…๋‹ˆ๋‹ค . ์ปค๋ฐ‹ ๋กœ๊ทธ๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์˜๋„๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ•œ ์‚ฌ๋žŒ์€ ๊ธฐ๋ณธ ๋ผ์šฐํ„ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ urlconf์— ๋งˆ์นจํ‘œ๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋ทฐ์…‹์— lookup_value_regex = '[^/]+' ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์€ ์ด ์ด์ „ ๊ธฐ๋Šฅ์„ ๊นจ๋œจ๋ฆฐ ์ปค๋ฐ‹์ž…๋‹ˆ๋‹ค . ์ปค๋ฐ‹ ๋กœ๊ทธ๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์˜๋„๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ•œ ์‚ฌ๋žŒ์€ ๊ธฐ๋ณธ ๋ผ์šฐํ„ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ urlconf์— ๋งˆ์นจํ‘œ๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋ทฐ์…‹์— lookup_value_regex = '[^/]+' ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์• ์ดˆ์— ๋„ํŠธ๊ฐ€ ์ œ์™ธ๋œ ์ด์œ ๊ฐ€ ๋ญ”์ง€...

Iirc ์ ์€ URL ๋‚ด์— ํ™•์žฅ ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: /myendpoint.json).

๊ทธ๋ฆฌ๊ณ  ์ด์ „ ๊ธฐ๋Šฅ์ธ 3cd15fb ๋ฅผ ๊นจ๋œจ๋ฆฐ ์ปค๋ฐ‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ๋กœ๊ทธ๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์˜๋„๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ•œ ์‚ฌ๋žŒ์€ ๊ธฐ๋ณธ ๋ผ์šฐํ„ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ urlconf์— ๋งˆ์นจํ‘œ๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋ทฐ์…‹์— lookup_value_regex = '[^/]+' ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰