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