Skip to content

arrobalytics/django-grpc-framework

 
 

Repository files navigation

Django gRPC Framework

https://readthedocs.org/projects/djangogrpcframework/badge/?version=latest https://travis-ci.org/fengsp/django-grpc-framework.svg?branch=master https://img.shields.io/pypi/pyversions/djangogrpcframework https://img.shields.io/pypi/l/djangogrpcframework

Django gRPC framework is a toolkit for building gRPC services, inspired by djangorestframework.

Requirements

  • 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

Installation

$ pip install djangogrpcframework

Add django_grpc_framework to INSTALLED_APPS setting:

INSTALLED_APPS = [ ... 'django_grpc_framework', ]

Demo

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 migrate

Generate .proto file demo.proto:

python manage.py generateproto --model django.contrib.auth.models.User --fields id,username,email --file demo.proto

Generate gRPC code:

python -m grpc_tools.protoc --proto_path=./ --python_out=./ --grpc_python_out=./ ./demo.proto

Now 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 --dev

You 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='')

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 98.7%
  • Makefile 1.3%