Services¶
Django gRPC framework provides an Service
class, which is pretty much the
same as using a regular gRPC generated servicer interface. For example:
import grpc
from django_grpc_framework.services import Service
from blog.models import Post
from blog.serializers import PostProtoSerializer
class PostService(Service):
def get_object(self, pk):
try:
return Post.objects.get(pk=pk)
except Post.DoesNotExist:
self.context.abort(grpc.StatusCode.NOT_FOUND, 'Post:%s not found!' % pk)
def Retrieve(self, request, context):
post = self.get_object(request.id)
serializer = PostProtoSerializer(post)
return serializer.message
Service instance attributes¶
The following attributes are available in a service instance.
.request
- the gRPC request object.context
- thegrpc.ServicerContext
object.action
- the name of the current service method
As servicer method¶
-
classmethod
Service.
as_servicer
(**initkwargs)¶ Returns a gRPC servicer instance:
servicer = PostService.as_servicer() add_PostControllerServicer_to_server(servicer, server)
Root handlers hook¶
We need a hanlders hook function to add all servicers to the server, for example:
def grpc_handlers(server):
demo_pb2_grpc.add_UserControllerServicer_to_server(UserService.as_servicer(), server)
You can set the root handlers hook using the ROOT_HANDLERS_HOOK
setting
key, for example set the following in your settings.py
file:
GRPC_FRAMEWORK = {
...
'ROOT_HANDLERS_HOOK': 'path.to.your.curtom_grpc_handlers',
}
The default setting is '{settings.ROOT_URLCONF}.grpc_handlers'
.