Parse로 개발을 많이 하다보니 Parse가 제공하는 다양한 Query들을 입맛에 맞게 잘사용하고 있었다.


그래서 당연히 Firebase도 다양하게 제공하겠지 싶었다.


그런데...두둥....and Query와 or Query는 제공하지 않는다.


그래서 어떻게 하면 될지 여기 저기 찾다가 힌트를 얻었는데 and query는 컬럼을 하나 더 만들어서 두 컬럼을 합친 값을 넣어 놓는 방법이다.

json형태로 저장이 되서 컬럼이란 표현을 쓰는게 맞는지는 모르겠는데 예를 들어 "사과"란 값과 "true"란 값을 가진 컬럼이 있다면 두 값을 저장한 후 "사과_true"란 값을 하나 더 저장하고, 두 값을 합친 값으로 Query를 날리면 된다.


or Query는 고민 중이다.


python으로 개발하다가 외부라이브러리를 쓰다보면 많이 보는 글자가 바로 *args 또는 **kwargs 다.


한마디로 말해서 어떤 값을 넣을진 모르는데 *args는 값을 넣으면 함수에 변수가 튜플형태로 입력되는 것이고, **kwargs는 딕셔너리 형태로 입력되는 것이라고 보면 된다.


def a(*args):

print args


a(1,2,3,4,)


==> (1,2,3,4)


def b(**kwargs):

 print kwargs


b( a=1, b=2, c=3)


==>{ a:1, b:2, c:3}



예전에 개발 선생님에게 물어봤을 때는 설명해줘도 뭔말인지 잘 몰랐고 왜 써야 하는지도 이해를 못했는데 class를 이용해 객체를 만들어 코딩하는 방법을 사용하다보니 자연스럽게 개념을 알게 되었다.


class를 기반으로 코딩을 하다보면 변수를 일일히 받아야 하는 경우도 있지만 있어도 되고 없어도 되는 그런 변수를 받아야 하는 경우도 있다.


예를 들어 get 방식으로 api를 호출 할때 필수적으로 들어가야 하는 변수들도 있지만 그렇지 않은 변수들도 있다.


http://www.sampleapi.com/api?a=1&b=2&c=3


위와 같은 URL이 있을 때

이 URL을 호출하는데 a변수는 필수적인 변수고 b와 c는 별 상관없는 변수라고 해보자


만약 class를 static하게 만든다고 하면


import requests


class SampleApi:


def __init__(self, url, a, b, c):

self.url = url

self.a = a

self.b = b

self.c = c


def getUrl(self):


url = self.url + "a=" + self.a + "&b=" + self.b + "&c=" +self.c


response = requests.get(url)


return response




sample = SampleApi( "http://www.sampleapi.com/api?", "1", "2","3" )

a = sample.getUrl()



이런 식으로 코딩을 해야 한다.

근데 **kwargs를 쓰면 쓰는 입장에서 변수입력을 보다 간단하게 해결 할 수 있다.



import requests


class SampleApi:


def __init__(self, url, a):

self.url = url

self.a = a


def getUrl(self, **kwargs):


optionUrl = ""


if kwargs.has_key("b"):


optionUrl += "&b=" + kwargs["b"]


if kwargs.has_key("c"):


optionUrl += "&c=" + kwargs["c"]


url = self.url + "a=" + self.a + optionUrl


response = requests.get(url)


return response




sample = SampleApi( "http://www.sampleapi.com/api?", "1" )


#아무런 변수도 입력 안된 경우

a = sample.getUrl()


#변수 b만 입력한 경우

a = sample.getUrl(b="2")


#변수 c만 입력한 경우

a = sample.getUrl(c="3")


#변수 b,c를 모두 입력한 경우

a= sample.getUrl(b="2", c="3")


이전에는 모두 넣어야 했던 것과 달리 원하는 형태로 변경이 가능해진다.


거의 3년이 다 되서야 써먹다니;;;

ㅋㅋㅋㅋ 갑갑한 개발자로다...

https://github.com/lorin/mezzanine-paas


한방에 해결했다.


안돼서 꽤나 시간을 썼는데 허무...


암튼 샘플 앱을 올리면 끝난다~!!!


ㅋㅋㅋ

+ Recent posts