Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Django-allauth
- array
- python
- flask
- for loop
- numpy
- SQL
- graphene-django
- allauth
- GraphQL
- tkinter Radio 동적버튼
- check_password
- Django
- FastAPI
Archives
- Today
- Total
객
[Django] Graphql 기반 - Create, Update 본문
todo 프로그램으로 create, update, delete를 정리 합니다.
1. graphql에서 mutate로 질의에 사용.
2. delete class는 update class 같이 사용 하였다.
3. 출처 : www.twilio.com 에서 참고하였음.
todos/models.py
from django.db import models
class TodoItem(models.Model) :
id = models.BigAutoField(primary_key=True)
content = models.CharField(max_length=350)
create_date = models.DateTimeField(auto_now_add=True )
done = models.BooleanField(default=False)
delyn_date = models.DateTimeField(auto_now=True )
delyn = models.BooleanField(default=False)
class Mata :
ordering = ['done', '-id']
1. 인덱스 키인 'id'는 auto_increment 하도록 하였음.
2. view 단에서 보여질때 소트 된 역순으로 보여질 것이다.
todos/urls.py
from django.urls import path
from graphene_django.views import GraphQLView
from django.views.decorators.csrf import csrf_exempt
from graphene_django.views import GraphQLView
from .schema import schema
urlpatterns = [
path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))),
]
todos/schema.py
from graphene_django import DjangoObjectType
from .models import TodoItem
from django.utils import timezone
import graphene
class Todo(DjangoObjectType) :
class Meta:
model = TodoItem
클라이언트가 API를 통해 데이터를 추가하거나 변경할 수 있도록 필드를 정의 하였다.
class TodosInput (graphene.InputObjectType) :
id = graphene.ID()
content = graphene.String()
create_date = graphene.DateTime()
done = graphene.Int()
delyn_date = graphene.DateTime()
delyn = graphene.Int()
1) Create class
# create class
class CreateTodos(graphene.Mutation) :
class Arguments:
todo_data = TodosInput(required=True)
todo = graphene.Field(Todo)
@staticmethod
def mutate(root, info,todo_data=None ) :
todos_insert = TodoItem(
content = todo_data.content,
uid = todo_data.uid
)
todos_insert.save()
return CreateTodos(todo=todos_insert)
2) Update class / Delete class
# update class / delete class
class UpdateTodos(graphene.Mutation) :
class Arguments :
todos_data = TodosInput(required=True)
todo = graphene.Field(Todo)
@staticmethod
def mutate(root, info, todos_data=None) :
todo_instance = TodoItem.objects.get(pk=todos_data.id)
if todo_instance :
todo_instance.content = todo_instance.content if todos_data.content is None else todos_data.content
todo_instance.done = todos_data.done # update
todo_instance.delyn = todos_data.delyn # delete
todo_instance.save()
return UpdateTodos(todo=todo_instance)
return UpdateTodos(todo=None)
class Mutation(graphene.ObjectType) :
create_todos = CreateTodos.Field()
update_todos = UpdateTodos.Field()
deletedate_todos = DeleteTodos.Field()
schema = graphene.Schema(query=TodoQuery, mutation=Mutation)
delete class sms "DeleteTodos"로 만들면 된다. (코드가 중복이 되어 하나만 올렸음.)
'[PL] > Python' 카테고리의 다른 글
[Python] for loop관련 예제 (0) | 2022.01.25 |
---|---|
Django-allauth 설정 및 작성 (0) | 2022.01.13 |
[Django] Django ORM (0) | 2021.09.13 |
Graphql기반한 CRUD중 - Select (0) | 2021.09.13 |
[Django] Django ORM (0) | 2021.09.13 |