๐Ÿ Python/Django & DRF

Django ๋ทฐ์—์„œ 'me'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ (๋ฐฉ์‹ ์ฐจ์ด)

sgaeng 2024. 12. 5. 18:14

 

์žฅ๊ณ ์—์„œ 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 ์‘๋‹ต์„ '๊ฐœ์ธํ™”'ํ•˜๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•˜๊ณ  ๋ณด๋‹ˆ๊นŒ

์กฐ๊ธˆ ๋‹ค๋ฅธ ์˜๋ฏธ์ด๊ณ  ๊ฐ™์€ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‚˜? ์‹ถ๊ธฐ๋„ ํ•œ๋ฐ

 

์ฒ˜์Œ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ์–ด์„œ!

์ด ๊ธ€๋กœ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค ํ—คํ—ท ๐Ÿฅฐ ๐Ÿงš