本文將為學(xué)校管理系統(tǒng)構(gòu)建 GraphQL API,該系統(tǒng)包含學(xué)生、教師和課程之間的關(guān)系。我們將實現(xiàn)一個 API,用于獲取課程及其注冊學(xué)生和分配教師信息。
創(chuàng)建虛擬環(huán)境
python -m venv smsvenv
激活虛擬環(huán)境后,所有依賴項(如 Django 和 Graphene-Django)都將在此環(huán)境中安裝。
安裝依賴項
pip install django graphene-django
創(chuàng)建項目結(jié)構(gòu)
使用 Django 命令創(chuàng)建項目文件夾結(jié)構(gòu),并將 graphene-django 和 school 添加到 school_management/settings.py 中:
INSTALLED_APPS = [
...
'graphene_django',
'school',
]
配置數(shù)據(jù)庫
默認使用 SQLite:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
在 school/models.py 中為學(xué)生、教師和課程定義 Django ORM 模型及其關(guān)系:
通過 Django Admin 界面創(chuàng)建學(xué)生、教師和課程的示例數(shù)據(jù):
admin.py 中注冊模型。在 school/ 目錄創(chuàng)建 schema.py 文件,包含以下兩個主要部分:
使用 DjangoObjectType 將 Django 模型轉(zhuǎn)換為 GraphQL 類型:
import graphene
from graphene_django.types import DjangoObjectType
from .models import Student, Teacher, Course
class StudentType(DjangoObjectType):
class Meta:
model = Student
class TeacherType(DjangoObjectType):
class Meta:
model = Teacher
class CourseType(DjangoObjectType):
class Meta:
model = Course
示例查詢獲取課程及相關(guān)信息:
class Query(graphene.ObjectType):
all_students = graphene.List(StudentType)
all_teachers = graphene.List(TeacherType)
all_courses = graphene.List(CourseType)
def resolve_all_students(self, info, **kwargs):
return Student.objects.all()
def resolve_all_teachers(self, info, **kwargs):
return Teacher.objects.all()
def resolve_all_courses(self, info, **kwargs):
return Course.objects.all()
schema = graphene.Schema(query=Query)
在 school/views.py 中添加視圖,用于測試 GraphQL 查詢。在 school_management/urls.py 中將 URL 映射到該視圖,以便通過瀏覽器訪問 API。
本文介紹了 GraphQL 的基本原理及其在處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)中的優(yōu)勢。通過 Python 和 Django,我們構(gòu)建了一個簡易 GraphQL API,用于管理學(xué)校系統(tǒng)中的學(xué)生、教師和課程數(shù)據(jù)。GraphQL 高性能、低帶寬使用,使其成為現(xiàn)代 API 開發(fā)的理想選擇。建議讀者通過實踐進一步掌握 GraphQL,實現(xiàn)更多高效的數(shù)據(jù)交互場景。
原文鏈接: https://refine.dev/blog/graphql-with-python/