Skip to content

ehsu0407/django-autographql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

autographql

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

  1. Add "autographql", "graphene_django, and "bridgekeeper" to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
        ...
        'autographql',
        'graphene_django',
        'bridgekeeper',
    ]
    
  2. 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
    ]
    
  3. Add the graphql URLconf in your project urls.py like this:

    path('graphql', csrf_exempt(GraphQLView.as_view(graphiql=True)), name='graphql'),
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. Start the development server and visit http://127.0.0.1:8000/graphql/ to view your fully featured graphql api!

Related Projects

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages