django-autographql 0.0.4

Creator: codyrutscher

Last updated:

Add to Cart

Description:

djangoautographql 0.0.4

autographql is a Django app to automatically generate a GraphQL api from
Django models.
Detailed documentation is in the “docs” directory.

Features

Automatic optimization of querysets to prevent N+1 lookups
Record level permissions system provided by Bridgekeeper integration
Easily extended automatic filters based on django Lookups



Quick start

Add “autographql”, “graphene_django, and “bridgekeeper” to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [
...
'autographql',
'graphene_django',
'bridgekeeper',
]

Add the following settings to your settings.py:
GRAPHENE = {
'SCHEMA': 'autographql.schema.schema',
'MIDDLEWARE': [
'autographql.auth.middleware.AuthorizationMiddleware',
]
}

AUTHENTICATION_BACKENDS = [
'bridgekeeper.backends.RulePermissionBackend',
'django.contrib.auth.backends.ModelBackend', # this is default
]

Add the graphql URLconf in your project urls.py like this:
path('graphql', csrf_exempt(GraphQLView.as_view(graphiql=True)), name='graphql'),

Write your models extending GraphQLModel instead of models.Model:
# cookbook/ingredients/models.py
from django.db import models
from autographql import GraphQLModel


class Category(GraphQLModel):
name = models.CharField(max_length=100)

def __str__(self):
return self.name


class Ingredient(GraphQLModel):
name = models.CharField(max_length=100)
notes = models.TextField()
category = models.ForeignKey(Category, related_name='ingredients')

def __str__(self):
return self.name

Add some access control rules to your models:
# cookbook/ingredients/permissions.py
from bridgekeeper import perms
from bridgekeeper.rules import always_allow

from autographql.auth.utils import get_model_permission, VIEW, CREATE, UPDATE, DELETE
from cookbook.models import Category, Ingredient

perms[get_model_permission(Category, VIEW)] = always_allow
perms[get_model_permission(Category, CREATE)] = always_allow
perms[get_model_permission(Category, UPDATE)] = always_allow
perms[get_model_permission(Category, DELETE)] = always_allow
perms[get_model_permission(Ingredient, VIEW)] = always_allow
perms[get_model_permission(Ingredient, CREATE)] = always_allow
perms[get_model_permission(Ingredient, UPDATE)] = always_allow
perms[get_model_permission(Ingredient, DELETE)] = always_allow

Import the permissions file in your app’s ready function:
# cookbook/ingredients/app.py
from django.apps import AppConfig


class IngredientsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'ingredients'

def ready(self):
# Apply permissions
import ingredients.permissions

Start the development server and visit http://127.0.0.1:8000/graphql/
to view your fully featured graphql api!



Related Projects

graphene (https://github.com/graphql-python/graphene)
graphene-django (https://github.com/graphql-python/graphene-django)
bridgekeeper (https://github.com/excitedleigh/bridgekeeper)

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.