Added basis of backbone api

This commit is contained in:
Mark Riedesel 2013-11-10 20:12:44 -06:00
parent 377a6bacc4
commit 789c5b47be
6 changed files with 123 additions and 14 deletions

View file

@ -16,13 +16,13 @@ class PageAdmin(admin.ModelAdmin):
order_by = ['document', 'page_num'] order_by = ['document', 'page_num']
class Media: class Media:
js = ("lib/underscore.js", "lib/backbone.js",) js = ("lib/underscore.js", "lib/backbone.js", 'js/pdfformfiller/pdfformfiller.js')
def get_urls(self): def get_urls(self):
urls = super(PageAdmin, self).get_urls() urls = super(PageAdmin, self).get_urls()
my_urls = patterns('', my_urls = patterns('',
url(r'^(?P<pk>.*)/preview/$', self.admin_site.admin_view(self.preview), name='preview'), url(r'^(?P<pk>.*)/preview/$', self.admin_site.admin_view(self.preview), name='preview'),
url(r'^(?P<pk>.*)/json/$', self.admin_site.admin_view(self.json, name='json'), url(r'^(?P<pk>.*)/json/$', self.admin_site.admin_view(self.json), name='json'),
) )
return my_urls + urls return my_urls + urls

1
requirements.txt Normal file
View file

@ -0,0 +1 @@
pypoppler

View file

@ -0,0 +1 @@
console.log('pdfformfiller loaded!');

19
urls.py
View file

@ -1,12 +1,23 @@
from django.conf.urls import patterns, url from django.conf.urls import patterns, url, include
import backbone
from pdfformfiller.views import editor from pdfformfiller.views import editor
backbone.autodiscover()
urlpatterns = patterns('pdfformfiller.views', urlpatterns = patterns('pdfformfiller.views',
url(r'^(?P<pdf>.*)/edit/$', editor.PDFFormFillerEditor.as_view(), name='pdfformfiller-edit'), url(r'^(?P<pdf>.*)/edit/$', editor.PDFFormFillerEditor.as_view(), name='pdfformfiller-edit'),
) )
urlpatterns += patterns('pdfformfiller.views.json', urlpatterns = patterns('pdfformfiller.views.api',
url(r'^json/(?P<pdf>\d+)/$', 'get_pages', name='pdfformfiller-json-get-pages'), url(r'^api/document/$', 'document', name='pdfformfiller_api_document'),
url(r'^json/(?P<pdf>\d+)/(?P<page_no>\d+)/$', 'get_page', name='pdfformfiller-json-get-page'), url(r'^api/document/(?P<id>\d+)/$', 'document_detail', name='pdfformfiller_api_document_detail'),
url(r'^api/document/(?P<id>\d+)/pages/$', 'document_pages', name='pdfformfiller_api_document_pages'),
url(r'^api/page/$', 'page', name='pdfformfiller_api_page'),
url(r'^api/page/(?P<id>\d+)/$', 'page_detail', name='pdfformfiller_api_page_detail'),
url(r'^api/page/(?P<id>\d+)/fields/$', 'page_fields', name='pdfformfiller_api_page_fields'),
) )
urlpatterns += patterns('',
(r'^backbone/', include(backbone.site.urls)),)

104
views/api.py Normal file
View file

@ -0,0 +1,104 @@
import json
from django.http import HttpResponse
from django.utils.encoding import is_protected_type
from django.db.models.fields.files import File
from pdfformfiller import models
def json_response(data):
response = HttpResponse(json.dumps(data))
response['Content-Type'] = 'application/json'
return response
def extract_fields(model):
result = {}
for field in model._meta.fields:
value = result[field.name] = field._get_val_from_obj(model)
if isinstance(value, File):
value = value.url
result[field.name] = value
return result
"""
def pages(request, page_id=None):
context = {}
pages = []
if doc_id:
pages = models.Page.objects.get(pk = page_id)
elif request.GET('document', None):
doc_id = request.GET('document')
pages = models.Page.objects.filter(document__pk = doc_id)
else:
pages = []
for page in pages:
pages.append(extract_fields(page)) #, ['id', 'document', ))
context['pages'] = pages
return json_response(context)
def fields(request, page_id=None):
page = models.Page.objects.get(document__pk = pdf,
page_num = page_num)
fields = page.formfield_set.all()
context = {}
#context['page'] = extract_fields(page)
context['page']['fields'] = map(extract_fields, fields)
return json_response(context)
"""
def document(request):
documents = models.Document.objects.all().values('id','name')
return json_response(list(documents))
def document_detail(request, id):
document = models.Document.objects.get(pk=id)
context = extract_fields(document)
return json_response(context)
def page(request):
pages = models.Page.objects.all()
context = [extract_fields(p) for p in pages]
return json_response(context)
def page_detail(request, id):
page = models.Page.objects.get(pk=id)
context = extract_fields(page)
return json_response(context)
def document_pages(request, id):
pages = models.Page.objects.filter(document__pk=id)
context = [extract_fields(page) for page in pages]
return json_response(context)
def field(request):
fields = models.FormField.objects.all()
context = [extract_fields(f) for f in fields]
return json_response(context)
def field_detail(request, id):
field = models.FormField.objects.get(pk=id)
context = extract_fields(field)
return json_response(context)
def page_fields(request, id):
fields = models.FormField.objects.filter(page__pk=id)
context = [extract_fields(f) for f in fields]
return json_response(context)

View file

@ -1,8 +0,0 @@
from django.http import HttpResponse
def json_response(context):
response = HttpResponse(context)
response['Content-Type'] = 'application/pdf'
return response