Now using tastypie for all our API needs.

This commit is contained in:
Isaac Bythewood
2012-05-11 02:08:46 +00:00
parent d50e7ce596
commit 10ffd90760
9 changed files with 31 additions and 30 deletions

16
pinry/api/api.py Normal file
View File

@@ -0,0 +1,16 @@
from tastypie.resources import ModelResource
from tastypie import fields
from pinry.pins.models import Pin
class PinResource(ModelResource):
thumbnail = fields.CharField(readonly=True)
class Meta:
queryset = Pin.objects.all()
resource_name = 'pin'
include_resource_uri = False
def dehydrate_thumbnail(self, bundle):
return Pin.objects.only('image').get(pk=bundle.data['id']).image.url_200x1000

View File

@@ -6,10 +6,7 @@ from django.core.urlresolvers import reverse
class RecentPinsTest(TestCase):
def setUp(self):
self.client = Client()
self.url = reverse('api:pins-recent', args=[0])
def test_url(self):
self.assertEqual(self.url, '/api/pins/recent/0/')
self.url = '/api/pin/?format=json'
def test_status_code(self):
response = self.client.get(self.url)

View File

@@ -1,6 +1,8 @@
from django.conf.urls import patterns, include, url
from .api import PinResource
pin_resource = PinResource()
urlpatterns = patterns('',
url(r'^pins/recent/(?P<page>\d*)/$', 'pinry.api.views.pins_recent', name='pins-recent'),
url(r'', include(pin_resource.urls)),
)

View File

@@ -1,21 +0,0 @@
from django.utils import simplejson
from django.http import HttpResponse
from pinry.pins.models import Pin
def pins_recent(request, page=1):
start_pin = abs(int(page) - 1) * 25
end_pin = int(page) * 25
pins = Pin.objects.order_by('-id')[start_pin:end_pin]
recent_pins = []
for pin in pins:
recent_pins.append({
'id': pin.id,
'thumbnail': pin.image.url_200x1000,
'original': pin.image.url,
'description': pin.description,
})
return HttpResponse(simplejson.dumps(recent_pins), mimetype="application/json")

View File

@@ -2,8 +2,8 @@
* Based on Wookmark's endless scroll.
*/
$(window).ready(function () {
var apiURL = '/api/pins/recent/'
var page = 1;
var apiURL = '/api/pin/?format=json&offset='
var page = 0;
var handler = null;
var isLoading = false;
@@ -40,7 +40,7 @@ $(window).ready(function () {
$('#loader').show();
$.ajax({
url: apiURL+page,
url: apiURL+(page*20),
success: onLoadData
});
};
@@ -49,6 +49,7 @@ $(window).ready(function () {
* Receives data from the API, creates HTML for images and updates the layout
*/
function onLoadData(data) {
data = data.objects;
isLoading = false;
$('#loader').hide();
@@ -59,7 +60,7 @@ $(window).ready(function () {
for(; i<length; i++) {
image = data[i];
html += '<div class="pin">';
html += '<a class="fancybox" rel="pins" href="'+image.original+'">';
html += '<a class="fancybox" rel="pins" href="'+image.image+'">';
html += '<img src="'+image.thumbnail+'" width="200" height="'+Math.round(image.height/image.width*200)+'">';
html += '</a>';
html += '<p>'+image.description+'</p>';

View File

@@ -23,3 +23,6 @@ class Pin(models.Model):
temp_img.flush()
self.image.save(self.url.split('/')[-1], File(temp_img))
super(Pin, self).save()
class Meta:
ordering = ['-id']

View File

@@ -49,6 +49,7 @@ MESSAGE_TAGS = {
messages.SUCCESS: 'alert alert-success',
messages.INFO: 'alert alert-info',
}
API_LIMIT_PER_PAGE = 20
INSTALLED_APPS = (
'django.contrib.auth',

View File

@@ -1,4 +1,5 @@
Django==1.4
South==0.7.4
PIL==1.1.7
django-tastypie==0.9.11
git+git://github.com/vannoppen/django-thumbs.git@v1.0.0#egg=django-thumbs

View File

@@ -1,6 +1,7 @@
Django==1.4
South==0.7.4
PIL==1.1.7
django-tastypie==0.9.11
git+git://github.com/vannoppen/django-thumbs.git@v1.0.0#egg=django-thumbs
django-jenkins==0.12.1