Working on public API

master
Nick Sergeant 2011-10-01 19:09:59 -04:00
parent 27cf162939
commit 362dd50520
5 changed files with 71 additions and 13 deletions

View File

@ -36,6 +36,7 @@ TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.load_template_source',
)
MIDDLEWARE_CLASSES = (
'django.middleware.cache.CacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',

View File

@ -19,7 +19,7 @@ class SniptAdmin(admin.ModelAdmin):
admin.site.register(Snipt, SniptAdmin)
class CommentAdmin(admin.ModelAdmin):
readonly_fields = ('user', 'snipt',)
#readonly_fields = ('user', 'snipt',)
list_display = ('comment', 'user', 'snipt', 'created', 'modified',)
search_fields = ('comment', 'user__username',)
ordering = ('created',)

View File

@ -1,8 +1,60 @@
from tastypie.resources import ModelResource
from snipts.models import Snipt
from django.contrib.auth.models import User
from snipts.models import Comment, Snipt
from tastypie.cache import SimpleCache
from taggit.models import Tag
from tastypie import fields
class SniptResource(ModelResource):
class PublicUserResource(ModelResource):
class Meta:
queryset = Snipt.objects.all()
queryset = User.objects.all()
resource_name = 'user'
fields = ['username',]
cache = SimpleCache()
def dehydrate(self, bundle):
bundle.data['url'] = 'https://snipt.net/%s/' % bundle.obj.username
return bundle
class PublicCommentSniptResource(ModelResource):
class Meta:
queryset = Snipt.objects.filter(public=True).order_by('-created')
resource_name = 'snipt'
fields = ['id',]
cache = SimpleCache()
class PublicTagResource(ModelResource):
class Meta:
queryset = Tag.objects.all()
resource_name = 'tag'
fields = ['name', 'slug',]
cache = SimpleCache()
class PublicCommentResource(ModelResource):
user = fields.ForeignKey(PublicUserResource, 'user')
snipt = fields.ForeignKey(PublicCommentSniptResource, 'snipt')
class Meta:
queryset = Comment.objects.all()
resource_name = 'comment'
fields = ['user', 'snipt', 'comment', 'created', 'modified',]
cache = SimpleCache()
class PublicSniptResource(ModelResource):
user = fields.ForeignKey(PublicUserResource, 'user')
comments = fields.ToManyField(PublicCommentResource, 'comment_set',
related_name='comment')
tags = fields.ToManyField(PublicTagResource, 'tags', related_name='tag')
class Meta:
queryset = Snipt.objects.filter(public=True).order_by('-created')
resource_name = 'snipt'
fields = ['user', 'title', 'slug', 'tags', 'lexer', 'code', 'stylized',
'created', 'modified',]
cache = SimpleCache()
def dehydrate(self, bundle):
bundle.data['url'] = bundle.obj.get_absolute_url()
bundle.data['user_username'] = bundle.obj.user.username
bundle.data['user_url'] = 'https://snipt.net/%s/' % bundle.obj.user.username
return bundle

View File

@ -33,6 +33,9 @@ class Snipt(models.Model):
def __unicode__(self):
return self.title
def get_absolute_url(self):
return "https://snipt.net/%s/%s/" % (self.user.username, self.slug)
class Comment(models.Model):
"""A comment on a Snipt"""
@ -42,7 +45,7 @@ class Comment(models.Model):
comment = models.TextField()
# TODO Set auto_now_add back to True for production!
created = models.DateTimeField(auto_now_add=False, editable=False)
created = models.DateTimeField(auto_now_add=True, editable=False)
modified = models.DateTimeField(auto_now=True, editable=False)
def __unicode__(self):

16
urls.py
View File

@ -1,15 +1,17 @@
from snipts.api import PublicCommentResource, PublicSniptResource, PublicUserResource, PublicTagResource
from django.views.generic.simple import direct_to_template
from django.conf.urls.defaults import *
from django.contrib import admin
from tastypie.api import Api
from views import home
admin.autodiscover()
from views import home
from snipts.api import SniptResource
snipt_resource = SniptResource()
public_api = Api(api_name='public')
public_api.register(PublicCommentResource())
public_api.register(PublicUserResource())
public_api.register(PublicSniptResource())
public_api.register(PublicTagResource())
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
@ -18,7 +20,7 @@ urlpatterns = patterns('',
url(r'^404/$', direct_to_template, {'template': '404.html'}),
url(r'^500/$', direct_to_template, {'template': '500.html'}),
url(r'^api/', include(snipt_resource.urls)),
url(r'^api/', include(public_api.urls)),
url(r'^$', home),
)