Skip to main content

Webmention support for any Django model.

Project description

Mentions

Mentions lets you add Webmention functionality to any Django model with minimal setup. There is an implementation running at https://django-wm.dev/ with source code available here.

Installation

pip install django-wm

Setup

Celery

Mentions uses Celery and RabbitMQ for running tasks asynchronously. If you do not use them already you will need to set them up first.

System:

sudo apt install rabbitmq-server

# Create user for celery service and make sure it can access your database
# e.g:
sudo useradd -N -M --system -s /bin/bash celery
sudo usermod -a -G www-data celery

# Run celery
sudo -u celery env/bin/celery -A projectname worker &

Project:

Add celery.py to your root project. For an example implementation see celery.py from the example project.

Project code

  1. Root project settings.py:

    • Set DOMAIN_NAME:

      DOMAIN_NAME = 'your.url.here'  # e.g. 'django-wm.dev'
      
    • Add “mentions” to INSTALLED_APPS:

      INSTALLED_APPS = [
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.flatpages',
          'django.contrib.sites',
          ...
          'mentions',
      ]
      
    • Add :code:’mentions.middleware.WebmentionHeadMiddleware’ to MIDDLEWARE:

      MIDDLEWARE = [
          ...
          'mentions.middleware.WebmentionHeadMiddleware',
      ]
      
  2. Root project urls.py

    urlpatterns = [
        ...
        path('webmentions/, include('mentions.urls')),
    ]
    
  3. Include MentionableMixin in the model(s) you want to support webmention functionality.

    IMPORTANT: Any models that include the mixin must also implement all_text and get_absolute_url methods:

    from mentions import MentionableMixin
    ...
    
    class MyModel(MentionableMixin, models.Model):
        ...
        def all_text(self) -> str:
            return f'{self.introduction} {self.content}'
    
        def get_absolute_url() -> str:
            return reverse('app.views.name', kwargs={'slug': self.slug})
    
  4. Update database tables:

    python manage.py makemigrations
    python manage.py migrate
    

Optional Settings

Add these keys to your project settings.py to alter default behaviour.

WEBMENTIONS_AUTO_APPROVE = bool (default: False)

  • True: Received webmentions are automatically approved and may be publicly visible.
  • False: Received webmentions require manual approval before they can be made public.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-wm, version 1.0.2
Filename, size & hash File type Python version Upload date
django_wm-1.0.2-py3-none-any.whl (40.6 kB) View hashes Wheel py3
django-wm-1.0.2.tar.gz (30.6 kB) View hashes Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page