Django gRPC framework is a toolkit for building gRPC services, inspired by djangorestframework.
- Python (3.6, 3.7, 3.8)
- Django (2.2, 3.0), Django REST Framework (3.10.x, 3.11.x)
- gRPC, gRPC tools, proto3
$ pip install djangogrpcframeworkAdd django_grpc_framework to INSTALLED_APPS setting:
INSTALLED_APPS = [ ... 'django_grpc_framework', ]Here is a quick example of using gRPC framework to build a simple model-backed service for accessing users, startup a new project:
$ django-admin startproject demo $ python manage.py migrateGenerate .proto file demo.proto:
python manage.py generateproto --model django.contrib.auth.models.User --fields id,username,email --file demo.protoGenerate gRPC code:
python -m grpc_tools.protoc --proto_path=./ --python_out=./ --grpc_python_out=./ ./demo.protoNow edit the demo/urls.py module:
from django.contrib.auth.models import User from django_grpc_framework import generics, proto_serializers import demo_pb2 import demo_pb2_grpc class UserProtoSerializer(proto_serializers.ModelProtoSerializer): class Meta: model = User proto_class = demo_pb2.User fields = ['id', 'username', 'email'] class UserService(generics.ModelService): queryset = User.objects.all() serializer_class = UserProtoSerializer urlpatterns = [] def grpc_handlers(server): demo_pb2_grpc.add_UserControllerServicer_to_server(UserService.as_servicer(), server)That's it, we're done!
$ python manage.py grpcrunserver --devYou can now run a gRPC client to access the service:
with grpc.insecure_channel('localhost:50051') as channel: stub = demo_pb2_grpc.UserControllerStub(channel) for user in stub.List(demo_pb2.UserListRequest()): print(user, end='')