Để tích hợp GraphQL vào dự án Django, bạn cần thực hiện các bước sau:
1. Cài đặt các thư viện cần thiết
pip install graphene-django
2. Cập nhật cấu hình Django (settings.py)
INSTALLED_APPS = [
# ...
'graphene_django',
# ...
]
GRAPHENE = {
'SCHEMA': 'project.schema.schema' # Đường dẫn đến schema chính
}
3. Tạo schema cho model
Giả sử bạn có một model Book
trong ứng dụng books
:
# books/models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
published_date = models.DateField()
def __str__(self):
return self.title
Tạo file schema cho ứng dụng:
# books/schema.py
import graphene
from graphene_django import DjangoObjectType
from .models import Book
class BookType(DjangoObjectType):
class Meta:
model = Book
fields = ("id", "title", "author", "published_date")
class Query(graphene.ObjectType):
all_books = graphene.List(BookType)
book = graphene.Field(BookType, id=graphene.Int())
def resolve_all_books(self, info):
return Book.objects.all()
def resolve_book(self, info, id):
return Book.objects.get(pk=id)
4. Tạo schema chính cho dự án
# project/schema.py
import graphene
import books.schema
class Query(books.schema.Query, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query)
5. Cấu hình URL
# urls.py
from django.urls import path
from graphene_django.views import GraphQLView
from django.views.decorators.csrf import csrf_exempt
urlpatterns = [
# ...
path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True))),
]
Các truy vấn cơ bản
Sau khi cài đặt, bạn có thể truy cập GraphiQL interface tại http://localhost:8000/graphql/
và thực hiện các truy vấn:
Lấy tất cả sách
query {
allBooks {
id
title
author
publishedDate
}
}
Lấy sách theo ID
query {
book(id: 1) {
title
author
}
}
Thêm mutation để tạo/cập nhật dữ liệu
# books/schema.py
class CreateBookMutation(graphene.Mutation):
class Arguments:
title = graphene.String(required=True)
author = graphene.String(required=True)
published_date = graphene.String(required=True)
book = graphene.Field(BookType)
def mutate(self, info, title, author, published_date):
book = Book(
title=title,
author=author,
published_date=published_date
)
book.save()
return CreateBookMutation(book=book)
class Mutation(graphene.ObjectType):
create_book = CreateBookMutation.Field()
Cập nhật schema chính:
# project/schema.py
class Mutation(books.schema.Mutation, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query, mutation=Mutation)
Truy vấn mutation:
mutation {
createBook(
title: "Django for Beginners"
author: "William S. Vincent"
publishedDate: "2020-01-01"
) {
book {
id
title
}
}
}