To use django-github-webhook in a project where you want to receive webhooks for push events:

from django_github_webhook.views import WebHookView

class MyWebHookReceiverView(WebHookView):
    secret = 'foobar'

    def push(self, payload, request):
        ''' Do something with the payload and return a JSON serializeable value. '''
        return {'status': 'received'}

If the secret has to be dynamically fetched for each request you should override the get_secret method:

from .models import Hook

class MyWebHookReceiverView(WebHookView):

    def get_secret(self):
        hook = Hook.objects.get(pk=self.request.kwargs['id'])
        return hook.secret

Each webhook can receive multiple GitHub events by implementing methods with the same name as the events. Right now the following events are accepted:

  • commit_comment
  • create
  • delete
  • deployment
  • deployment_status
  • fork
  • gollum
  • issue_comment
  • issues
  • member
  • membership
  • page_build
  • ping
  • public
  • pull_request
  • pull_request_review_comment
  • push
  • release
  • repository
  • status
  • team_add
  • watch

So in order to accept events of type fork and watch implement methods as follows. The payload parameter gets the already decoded JSON payload from the request body:

class MyWebHookReceiverView(WebHookView):

    def fork(self, payload, request):
        print('Forked by {payload[forkee][full_name]}'.format(payload=payload))
        return {'status': 'forked'}

    def watch(self, payload, request):
        print('Watched by {payload[sender][login]}'.format(payload=payload))