Pingback client/server implementation for Django framework.
Project description
This two applications provide 3 connected services: pingback server, pingback client and directory ping client.
Depends on the django-xmlrpc.
Configuration
First, install the django-xmlrpc application. You can download it either from repo or just use setuptools:
easy_install -Z -f http://pypi.aartemenko.com django-xmlrpc
Next, download and install django-pingback:
download sources from main repository
or use easy_install django-pingback
add pingback to your INSTALLED_APPS
run ./manage.py syncdb
setup client and server callbacks.
Connecting server
Pingback server receives pings from other sites, so, we must create function which binds our URLs an objects.
But first of all, add this urlpattern to your urls configuration:
((r'^xmlrpc/$', 'django_xmlrpc.views.handle_xmlrpc', {}, 'xmlrpc'))
It is a handler for all xmlrpc requests.
Usually, blog has a detailed view for each post. Suppose that our view resides in blog.views.post_detail and accepts one keyword arguments slug.
Here is simple example, how to make Post objects pingable:
from datetime import time, date, datetime from time import strptime from blog.models import Post from pingback import register_pingback, ping_func from django_xmlrpc import xmlrpcdispatcher # create simple function which returns Post object and accepts # exactly same arguments as 'details' view. def pingback_blog_handler(slug, **kwargs): return Post.objects.get(slug=slug) # register pingback on our post_detail register_pingback('blog.views.post_detail', pingback_blog_handler) # register pingback handler in the dispatcher xmlrpcdispatcher.register_function(ping_func, 'pingback.ping')
Now, go at you http://mysweetsite.com/xmlrpc/ and you should see pingback.ping method among few other system methods. If it is not there, then you made mistake in you server setup.
Also, you need to tell other sites, that your blog accepts pingbacks. You can do it by adding a link in the head of your site:
<link rel="pingback" href="{% url 'xmlrpc' %}" />
Or by adding X-Pingback HTTP header. Do do this, just add such line in the settings.py:
MIDDLEWARE_CLASSES = [ # ... 'pingback.middleware.PingbackMiddleware', ]
Connecting client signals
Let’s suppose, that you have a blog and want to ping external sites (like Technorati) on post save, and to receive pingbacks from other sites. Next two sections contain simple ‘how-to’ enable these features.
At first, setup configuration in the settings, here is an example:
DIRECTORY_URLS = ( 'http://ping.blogs.yandex.ru/RPC2', 'http://rpc.technorati.com/rpc/ping', )
Next, you must connect some signals to ping workers, which created using ping_external_links and ping_directories functions:
from django.db.models import signals from pingback.client import ping_external_links, ping_directories from blog.models import Post signals.post_save.connect( ping_external_links(content_attr = 'html', url_attr = 'get_absolute_url'), sender=Post, weak=False) signals.post_save.connect( ping_directories(url_attr = 'get_absolute_url'), sender=Post, weak=False)
Please note, that in the content_attr you must give either attribute or method name, which returns HTML content of the object.
If you don’t have such attribute or method, for example if you apply markdown filter in the template, then content_func argument can be used instead of the content_attr.
content_func must return HTML, and must accepts an instance as a single argument.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-pingback-0.3.tar.gz
.
File metadata
- Download URL: django-pingback-0.3.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ddf13d36723e756bc91be59203c20aeef385c21492d275843ebc74aae3ac1e1 |
|
MD5 | 1a190b0b811c080fc3b67c8bccbae275 |
|
BLAKE2b-256 | eed4a1f49d323a9ef90ca6902dc86ebeb72d1b79deecf4526473ea9ef6db459c |