Graphene-Django-Extras add some extra funcionalities to graphene-django to facilitate the graphql use without Relay and allow pagination and filtering integration
Project description
This package add some extra functionalities to graphene-django to facilitate the graphql use without Relay and allow pagination and filtering integration.
Installation:
For installing graphene-django-extras, just run this command in your shell:
pip install "graphene-django-extras"
Documentation:
- Extra functionalities:
- Fields:
DjangoFilterListField
DjangoFilterPaginateListField
DjangoListObjectField (Recommended)
- Mutations:
DjangoSerializerMutation
- Types:
DjangoObjectTypeExtra
DjangoListObjectType
DjangoInputObjectType
- Pagination:
LimitOffsetGraphqlPagination
PageGraphqlPagination
CursorGraphqlPagination (coming soon)
Examples:
Here is a simple use of graphene-django-extras:
1- Types Definition:
from django.contrib.auth.models import User
from graphene_django_extras import DjangoObjectType, DjangoListObjectType
from graphene_django_extras.pagination import LimitOffsetGraphqlPagination
class UserType(DjangoObjectType):
"""
This DjangoObjectType have a ID field, that allow filter by id and resolve method definition on Queries is not necessary
"""
class Meta:
model = User
description = " Type definition for single User model object "
filter_fields = {
'id': ['exact', ],
'first_name': ['icontains', 'iexact'],
'last_name': ['icontains', 'iexact'],
'username': ['icontains', 'iexact'],
'email': ['icontains', 'iexact']
}
class UserListType(DjangoListObjectType):
class Meta:
description = " Type definition for List of users "
model = User
pagination = LimitOffsetGraphqlPagination()
2- Input Types can be defined for use on mutations:
from graphene_django_extras import DjangoInputObjectType
class UserInput(DjangoInputObjectType):
class Meta:
description = " User Input Type for used as input on Arguments classes on traditional Mutations "
model = User
3- You can define traditional mutations that use Input Types or Mutations based on DRF SerializerClass:
import graphene
from .serializers import UserSerializer
from graphene_django_extras import DjangoSerializerMutation
from .types import UserType
from .input_types import UserInputType
class UserSerializerMutation(DjangoSerializerMutation):
"""
DjangoSerializerMutation auto implement Create, Delete and Update function
"""
class Meta:
description = " Serializer based Mutation for Users "
serializer_class = UserSerializer
class UserMutation(graphene.Mutation):
"""
To traditional graphene's mutation classes definition you must implement the mutate function
"""
user = graphene.Field(UserType, required=False)
class Arguments:
new_user = graphene.Argument(UserInput)
class Meta:
description = " Traditional graphene mutation for Users "
@classmethod
def mutate(cls, root, info, *args, **kwargs):
...
4- Defining schemes:
import graphene
from graphene_django_extras import DjangoObjectField, DjangoListObjectField
from .types import UserType, UserListType
from .mutations import UserMutation, UserSerializerMutation
class Queries(graphene.ObjectType):
# Possible User list queries definitions
all_users = DjangoListObjectField(UserListType, description=_('All Users query'))
all_users1 = DjangoFilterPaginateListField(UserType, pagination=LimitOffsetGraphqlPagination())
all_users2 = DjangoFilterListField(UserType)
all_users3 = DjangoListObjectField(UserListType, filterset_class=UserFilter, description=_('All Users query'))
# Defining the petition to a user
user = DjangoObjectField(UserType, description=_('Only one user'))
# Another way to define a single user query
other_way_user = DjangoObjectField(UserListType.getOne(), description=_('User List with pagination and filtering'))
class Mutations(graphene.ObjectType):
user_create = UserSerializerMutation.CreateField(deprecation_reason='Deprecation message')
user_delete = UserSerializerMutation.DeleteField()
user_update = UserSerializerMutation.UpdateField()
traditional_user_mutation = UserMutation.Field()
5- Examples of queries:
{
allUsers(username_Icontains:"john"){
results(limit:5, offset:5){
id
username
firstName
lastName
}
totalCount
}
allUsers1(lastName_Iexact:"Doe", limit:5, offset:0){
id
username
firstName
lastName
}
allUsers2(firstName_Icontains: "J"){
id
username
firstName
lastName
}
user(id:2){
id
username
firstName
}
}
6- Examples of Mutations:
mutation{
userCreate(newUser:{password:"test*123", email: "test@test.com", username:"test"}){
user{
id
username
firstName
lastName
}
ok
errors{
field
messages
}
}
userDelete(id:1){
ok
errors{
field
messages
}
}
userUpdate(newUser:{id:1, username:"John"}){
user{
id
username
}
ok
errors{
field
messages
}
}
}
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 Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file graphene-django-extras-0.0.1.tar.gz.
File metadata
- Download URL: graphene-django-extras-0.0.1.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b8c3cbe3c6f1c9bfcf9f52ff2decb918c0e31ada07276df04320d04159b9b1d
|
|
| MD5 |
a45506f974a72425998c3af95c0941b0
|
|
| BLAKE2b-256 |
fc871a7b89511005c5c1b160f0b3ee508590a567e053785d9d0254e0546ecc39
|
File details
Details for the file graphene_django_extras-0.0.1-py2.py3-none-any.whl.
File metadata
- Download URL: graphene_django_extras-0.0.1-py2.py3-none-any.whl
- Upload date:
- Size: 25.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9d6db0d40fb5d1e4df7aa63f00ef18584e1f18bf7e02857dae9987d84945502
|
|
| MD5 |
c8b48cd312c632aa402690bdefd89571
|
|
| BLAKE2b-256 |
b641e5b445868b390bf0dddc8a19f92bc9a95830356ddb5fa898ac2a7f94d332
|