Skip to main content

Some stuff that i used when developing with django

Project description

Introduction

Django app that expose a graphql schema as well as a graphiql interface.

User

Installation

pip install django-app-graphql

Configuration

in INSTALLED_APPS you need to add:

'graphene_django',
'django_filters',

After all your apps you need to use this app (this is important otherwise some models won’t be detected at all!):

'django_app_graphql',

The first thing you need to do is determine if you want your graphql server setupped using graphene or using ariadne. In settings, write:

DJANGOAPPGRAPHQL = dict(
    BACKENDTYPE="ariadne/graphene"
)

and select either ariadne or graphene.

Finally, in urls.py of the entire project add the following line:

urlpatterns = [
    ...
    path("graphqls/", include("django_app_graphql.urls")),
    ...
]

You have chosen graphene

The app needs to be deploy for last because otherwise it cannot detect all the Django models and their types. You also need to configure the authentication proces. Hence you need t add “AUTHENTICATION_BACKENDS” in the settings.py:

AUTHENTICATION_BACKENDS = [
    "graphql_jwt.backends.JSONWebTokenBackend",
    "django.contrib.auth.backends.ModelBackend"
]

After that, you need to properly configure the graphene, graphenedjango-extras and graphene-jwt. Add all these in your settings.py:

GRAPHENE = dict(
    SCHEMA" = "django_app_graphql.graphene.schema.SCHEMA",
    SCHEMA_OUTPUT = 'graphql-schema.json',
    SCHEMA_INDENT = 2,
    MIDDLEWARE = [
        "graphql_jwt.middleware.JSONWebTokenMiddleware",
        "django_app_graphql.middleware.GraphQLStackTraceInErrorMiddleware",
    ],
)

GRAPHENE_DJANGO_EXTRAS = dict(
    DEFAULT_PAGINATION_CLASS = 'graphene_django_extras.paginations.LimitOffsetGraphqlPagination',
    DEFAULT_PAGE_SIZE = 20,
    MAX_PAGE_SIZE = 50,
    CACHE_ACTIVE = True,
    CACHE_TIMEOUT = 300  # seconds
)

# see https://django-graphql-jwt.domake.io/en/latest/refresh_token.html
GRAPHQL_JWT = dict(
    # This configures graphql-jwt to add "token" input at each request to be authenticated
    JWT_ALLOW_ARGUMENT = True,
    JWT_ARGUMENT_NAME = "token",
    JWT_VERIFY_EXPIRATION = True,
    JWT_EXPIRATION_DELTA = timedelta(minutes=30),
    JWT_ALGORITHM = "HS256",
    JWT_REFRESH_EXPIRATION_DELTA = timedelta(days=7),
    JWT_AUTH_HEADER_PREFIX = "Bearer",
)

You have chosen ariadne

In settings.py add:

INSTALLED_APPS = [
    ...
    "ariadne.contrib.django",
]

Add templates (otherwise the playground won’t work):

TEMPLATES = [
    {
        ...,
        'APP_DIRS': True,
        ...
    },
]

Ariadne is in unstable development (I don’t know if it will ever be supported)

Generic tweaks

Finally you can configure this app, for instance:

DJANGO_APP_GRAPHQL = {
    "BACKEND_TYPE": "graphene",
    "EXPOSE_GRAPHIQL": True,
    "GRAPHQL_SERVER_URL": "",
    "ENABLE_GRAPHQL_FEDERATION": True,
    "SAVE_GRAPHQL_SCHEMA": "output/schema.graphql"
}

Developer

Update new version (only for developers)

You can use setuptools and twine:

python setup.py update_version_patch bdist_wheel
twine upload dist/*

Or you can use pmakeup

pmakeup update-version-patch build upload-to-pypi

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

django_app_graphql-1.30.14-py3-none-any.whl (34.0 kB view details)

Uploaded Python 3

File details

Details for the file django_app_graphql-1.30.14-py3-none-any.whl.

File metadata

File hashes

Hashes for django_app_graphql-1.30.14-py3-none-any.whl
Algorithm Hash digest
SHA256 742845a6de10b22971577e346de77152dba894881fb81a19185cf4839f9aee10
MD5 a784e47a8484390bf7e5ad6bde2e9f37
BLAKE2b-256 82f35a3a45c7c9a77d293ec3b57d65594f1aab856325ed11e5978edfb6b86141

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page