Build powerful, efficient, and flexible GraphQL APIs with seamless Django integration.
Go to file
Florian Zimmermann c127aec75b bugfix: let DjangoConnectionField call its resolver function
that is, the one specified using DjangoConnectionField(..., resolver=some_func)
2024-07-04 12:24:30 +02:00
.github Remove Django 4.1 (EOL) and add Django 5.0 to CI (#1483) 2023-12-14 11:20:54 +03:00
bin Isolated Graphene Django in a new package 2016-09-17 16:31:17 -07:00
docs Fix ReadTheDocs builds (#1509) 2024-03-29 12:11:56 +08:00
examples silence warnings 2024-07-04 11:46:58 +02:00
graphene_django bugfix: let DjangoConnectionField call its resolver function 2024-07-04 12:24:30 +02:00
.coveragerc Improved python syntax and sorts (pep8). Improved Readme 2016-09-17 17:09:56 -07:00
.gitignore fix: fk resolver permissions leak (#1411) 2023-07-18 15:16:52 +03:00
.pre-commit-config.yaml Use ruff format to replace black (#1473) 2023-10-25 11:33:00 +03:00
.readthedocs.yaml Fix ReadTheDocs builds (#1509) 2024-03-29 12:11:56 +08:00
.ruff.toml Use ruff format to replace black (#1473) 2023-10-25 11:33:00 +03:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2019-05-06 13:28:02 +01:00
CONTRIBUTING.md Fix ReadTheDocs builds (#1509) 2024-03-29 12:11:56 +08:00
LICENSE add license to repo 2018-05-25 01:28:51 -04:00
Makefile treat warnings as errors when running the tests 2024-07-04 11:27:12 +02:00
MANIFEST.in 👷 Add pre-commit (#1336) 2022-10-19 17:10:30 +03:00
README.md Fix ReadTheDocs builds (#1509) 2024-03-29 12:11:56 +08:00
setup.cfg Use ruff in pre-commit (#1441) 2023-08-06 01:47:00 +03:00
setup.py Add Python 3.12 to CI (#1481) 2023-12-05 22:11:00 +03:00
tox.ini treat warnings as errors when running the tests 2024-07-04 11:27:12 +02:00

Graphene Logo Graphene-Django

build pypi Anaconda-Server Badge coveralls

Graphene-Django is an open-source library that provides seamless integration between Django, a high-level Python web framework, and Graphene, a library for building GraphQL APIs. The library allows developers to create GraphQL APIs in Django quickly and efficiently while maintaining a high level of performance.

Features

  • Seamless integration with Django models
  • Automatic generation of GraphQL schema
  • Integration with Django's authentication and permission system
  • Easy querying and filtering of data
  • Support for Django's pagination system
  • Compatible with Django's form and validation system
  • Extensive documentation and community support

Installation

To install Graphene-Django, run the following command:

pip install graphene-django

Configuration

After installation, add 'graphene_django' to your Django project's INSTALLED_APPS list and define the GraphQL schema in your project's settings:

INSTALLED_APPS = [
    # ...
    'graphene_django',
]

GRAPHENE = {
    'SCHEMA': 'myapp.schema.schema'
}

Usage

To use Graphene-Django, create a schema.py file in your Django app directory and define your GraphQL types and queries:

import graphene
from graphene_django import DjangoObjectType
from .models import MyModel

class MyModelType(DjangoObjectType):
    class Meta:
        model = MyModel

class Query(graphene.ObjectType):
    mymodels = graphene.List(MyModelType)

    def resolve_mymodels(self, info, **kwargs):
        return MyModel.objects.all()

schema = graphene.Schema(query=Query)

Then, expose the GraphQL API in your Django project's urls.py file:

from django.urls import path
from graphene_django.views import GraphQLView
from . import schema

urlpatterns = [
    # ...
    path('graphql/', GraphQLView.as_view(graphiql=True)), # Given that schema path is defined in GRAPHENE['SCHEMA'] in your settings.py
]

Testing

Graphene-Django provides support for testing GraphQL APIs using Django's test client. To create tests, create a tests.py file in your Django app directory and write your test cases:

from django.test import TestCase
from graphene_django.utils.testing import GraphQLTestCase
from . import schema

class MyModelAPITestCase(GraphQLTestCase):
    GRAPHENE_SCHEMA = schema.schema

    def test_query_all_mymodels(self):
        response = self.query(
            '''
            query {
                mymodels {
                    id
                    name
                }
            }
            '''
        )

        self.assertResponseNoErrors(response)
        self.assertEqual(len(response.data['mymodels']), MyModel.objects.count())

Contributing

Contributions to Graphene-Django are always welcome! To get started, check the repository's issue tracker and contribution guidelines.

License

Graphene-Django is released under the MIT License.

Resources

Tutorials and Examples

  • Graphene - A library for building GraphQL APIs in Python
  • Graphene-SQLAlchemy - Integration between Graphene and SQLAlchemy, an Object Relational Mapper (ORM) for Python
  • Graphene-File-Upload - A package providing an Upload scalar for handling file uploads in Graphene
  • Graphene-Subscriptions - A package for adding real-time subscriptions to Graphene-based GraphQL APIs

Support

If you encounter any issues or have questions regarding Graphene-Django, feel free to submit an issue on the official GitHub repository. You can also ask for help and share your experiences with the Graphene-Django community on 💬 Discord

Release Notes