20200327 graphql 전반
2020. 3. 27. 21:51ㆍ개발/graphQL
여태까지 회사에서 django와 graphql을 활용하며 코드를 수정하고 기능들을 추가해왔지만 django에서 보내는 정보들을 정확히 어떻게 graphql에서 갖고 오는지 잘 알아보지 못했었다. 최근의 개인프로젝트를 진행하며 알게 된 것들과 회사에서 새로 기능들을 추가하며 알아낸 것들을 간단하게 정리해보겠다.
우선 graphene, graphene_django 등을 import 해놔야 한다. 그리고 나서, django에서 일반적으로 그렇듯이 table을 model.models로 정의한다. 다음과 같이.
class TableOne(models.Model):
u_id = UUIDField(editable=False, unique=True, null=False, default=uuid.uuid4)
created_at = DateTimeField(auto_now_add=True)
modified_at = DateTimeField(auto_now=True)
name = StringField(max_length=30, default='')
class Meta:
ordering = ['created_at']
이렇게 정의하면 graphql은 어떻게 알아먹어야 하는가? 다음과 같이 graphene directory에서 원하는 파일명으로 파일 만든 뒤 graphene schema를 정의해야한다. 똑같이 저기 tableone을 받아올 수 있도록.
class TableOneNode(DjangoObjectType):
created_at = graphene.Float()
modified_at = graphene.Float()
name = graphene.String()
class Meta(NLUCommonMeta):
model = models.TableOne
@staticmethod
def resolve_name(root, info, **kwargs):
return root.name or root.default_name()
@staticmethod
def resolve_created_at(root, info, **kwargs):
return root.created_at.timestamp()
@staticmethod
def resolve_modified_at(root, info, **kwargs):
return root.trained_at.timestamp()
graphql에서 필요하지 않은 정보를 위처럼 생략할 수 있다(ex.u_id) 그리고 여기서 root는 django models에서 정의한 model의 attribute를 그대로 갖고온다고 생각하면 된다.
'개발 > graphQL' 카테고리의 다른 글
20200329 django-graphql 디렉토리 구조 (0) | 2020.03.29 |
---|---|
1-1. 일단 뭔지라도 알자. (1) | 2020.02.09 |