Quickstart for Django usersΒΆ

News supports Django out of the box. Subscribing web contents using News with Django is as simple as following.

1. Define models

First off, you need to describe how your subscription schedule and web contents should look like to your database.

# models.py
from django.contrib.auth.models import User
from news.models.django import (
    create_default_news,
    create_default_schedule
)

Schedule = create_default_schedule(user_model=User)
News = create_default_news(schedule_model=Schedule)

2. Define a backend

Backend serves as an interface between your models and other news components. Any backend constructors will produce singleton backend objects based on combination of supplied models.

# backend.py
from news.backends import DjangoBackend
from .models import Schedule, News

backend = DjangoBackend(schedule_model=Schedule, news_model=News)

3. Define a scheduler

news usese celery as an task queue for distributing cover tasks over multiple workers. You will need to define your own celery instance and supply it to the scheduler.

# celery.py
from celery import Celery
celery = Celery()
# scheduler.py
from news.scheduler import Scheduler
from .backend import backend
from .celery import celery

scheduler = Scheduler(backend=backend, celery=celery)

if __name__ == '__main__':
    scheduler.start()

4. Register the scheduler’s celery task

Celery workers should know what kind of tasks they can work on. Scheduler’s make_task() task factory method creates it’s news cover task.

# tasks.py
from .scheduler import scheduler
scheduler_task = scheduler.make_task()

5. Populate your schedules

To get web contents periodically, you first need to subscribe an url.

# populate.py
from django.contrib.auth.models import User
from .models import Schedule

if __name__ == '__main__':
    owner = User.objects.first()
    schedule = Schedule(url='http://httpbin.org', owner=owner)
    schedule.save()

6. Launch celery workers and the scheduler

Launch celery workers and the scheduler on their each process!

$ celery worker
$ python scheduler.py