Django ๋ทฐ์์ 'me'๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ (๋ฐฉ์ ์ฐจ์ด)
์ฅ๊ณ ์์ GET LIST ์์ฒญ์์ ?user=me ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ GET DETAIL ์์ฒญ์์ pk ๋์ me๋ฅผ ์ ๋ ฅํ๋ ๋ฐฉ์์ด ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ
์ ๋ํด์ ์ด์ผ๊ธฐํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
GET LIST ์์ฒญ์์ /v1/push/?user=me ์ฒ๋ฆฌํ๊ธฐ
๋ชฉ๋ก ์๋ํฌ์ธํธ์์๋ user=me๊ฐ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ ๋
ํ์ฌ ์ฌ์ฉ์์ ๊ด๋ จ๋ ๊ฐ์ฒด(์ฌ๊ธฐ์๋ push ์ธ์คํด์ค)๋ง ํฌํจํ๋๋ก ์ฟผ๋ฆฌ์ ์ ํํฐ๋งํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
class PushFilter(django_filters.FilterSet):
user = django_filters.CharFilter(method="user_filter")
def user_filter(self, queryset, name, value):
if value:
if value == "me":
return queryset.filter(user=self.request.user)
else:
raise ParseError("The value is incorrect. Enter 'me' or leave it empty.")
- ์ปค์คํฐ๋ง์ด์ง: user_filter ๋ฉ์๋๋ ํํฐ๋ง ๋ก์ง์ ์ ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
- ์๋ฌ ์ฒ๋ฆฌ: ๊ฐ์ด me๊ฐ ์๋ ๊ฒฝ์ฐ ParseError๋ฅผ ๋ฐ์์์ผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ชป๋ ์ ๋ ฅ์ ์๋ฆฝ๋๋ค.
- ์ฟผ๋ฆฌ์ ํํฐ๋ง: ๋ฉ์๋๋ ์ฟผ๋ฆฌ์ ์ ์ง์ ํํฐ๋ฅผ ์ ์ฉํ์ฌ ์ธ์ฆ๋ ์ฌ์ฉ์์ ๊ฐ์ฒด๋ง ๊ฐ์ ธ์ต๋๋ค.
์ด ์ ๊ทผ๋ฒ์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๋ชฉ๋ก ์๋ํฌ์ธํธ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
GET DETAIL ์์ฒญ์์ /v1/user/{me} ์ฒ๋ฆฌํ๊ธฐ
์์ธ ์๋ํฌ์ธํธ์์๋ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ก์ง์ ์ฌ์ ์ํด์ผ ํฉ๋๋ค. ์๋๋ ์์ ์ ๋๋ค:
lookup_value_regex = "me"
def get_object(self):
if self.kwargs.get("pk") == "me":
return self.queryset.get(id=self.request.user.id)
return super().get_object()
- ์ ๊ท์ ๋งค์นญ: lookup_value_regex๋ me๊ฐ ๊ธฐ๋ณธ ํค๋ก ์ ํจํ ์ ๋ ฅ์์ ๋ณด์ฅํฉ๋๋ค.
- ์ปค์คํ ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ: get_object ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ pk๊ฐ me์ผ ๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋ฐฑ์ ๋ก์ง: ๋ค๋ฅธ ๊ฐ์ ๋ํด์๋ ๊ธฐ๋ณธ get_object ๋ก์ง์ด ์ ์ง๋ฉ๋๋ค.
์ด ์ ๊ทผ๋ฒ์ ์ฌ์ฉ์์ ์ฐ๊ด๋ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ๋ ๋ฐ ์ด์ ์ด ๋ง์ถฐ์ง ์๋ํฌ์ธํธ์์ ์ ์๋ํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก
๋ชฉ์ | ์ฌ์ฉ์์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค๋ก ์ฟผ๋ฆฌ์ ํํฐ๋ง | ์ฌ์ฉ์์ ๋ํ ํน์ ๊ฐ์ฒด ๊ฒ์ |
๊ตฌํ ๋ฐฉ์ | ์ปค์คํ ํํฐ ๋ฉ์๋ ์ฌ์ฉ | get_object ๋ฉ์๋ ์ฌ์ ์ |
์๋ฌ ์ฒ๋ฆฌ | ์๋ชป๋ ์ ๋ ฅ์ ๋ํด ParseError ๋ฐ์ | Django ๊ธฐ๋ณธ ์๋ฌ ์ฒ๋ฆฌ์ ์์กด |
์ ์ฐ์ฑ | ๋ ๋ณต์กํ ํํฐ๋ง ๋ก์ง ํ์ฉ | ๋จ์ผ ๊ฐ์ฒด ์๋ณ๋ก ์ ํ |
์ ์ฉ ๋ฒ์ | ์ฌ๋ฌ ๊ฐ์ฒด์ ๋ํด ์๋ | ๋จ์ผ ๊ฐ์ฒด์ ๋ํด ์๋ |
์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ(user=me) ๋๋ user_pk = me ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ API ์๋ต์ '๊ฐ์ธํ'ํ๋ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด๋ ๊ฒ ์ ๋ฆฌํ๊ณ ๋ณด๋๊น
์กฐ๊ธ ๋ค๋ฅธ ์๋ฏธ์ด๊ณ ๊ฐ์ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ฌถ์ ์ ์๋? ์ถ๊ธฐ๋ ํ๋ฐ
์ฒ์ ๊ตฌํํ ๋๋ ์กฐ๊ธ ํท๊ฐ๋ ธ์ด์!
์ด ๊ธ๋ก ์ด๋ ๊ฒ ์ ๋ฆฌํด๋ก๋๋ค ํคํท ๐ฅฐ ๐ง