Skip to content

Commit 9ef6179

Browse files
committed
Adding custom JSON resource for Restful Api.
1 parent 093a1dd commit 9ef6179

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

mainapp/models.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from contrib.stdimage import StdImageField
1717
import libxml2
1818
from django.utils.encoding import iri_to_uri
19+
from contrib.django_restapi.model_resource import Collection
1920

2021

2122
class Province(models.Model):
@@ -297,7 +298,19 @@ def __unicode__(self):
297298
"The string representation is the JavaScript API call."
298299
return mark_safe('GMarker(%s)' % ( self.js_params))
299300

300-
301+
302+
class ReportJSON(Collection):
303+
304+
def read(self, request):
305+
lon = request.GET["lon"]
306+
lat = request.GET["lat"]
307+
radius = int(request.GET.get('r', 4))
308+
point_str = "POINT(%s %s)" %(lon, lat)
309+
pnt = fromstr(point_str, srid=4326)
310+
reports = Report.objects.filter(is_confirmed = True,point__distance_lte=(pnt,D(km=radius))).distance(pnt).order_by('distance')
311+
return self.responder.list(request, reports)
312+
313+
301314
class FixMyStreetMap(GoogleMap):
302315
"""
303316
Overrides the GoogleMap class that comes with GeoDjango. Optionally,
@@ -579,4 +592,4 @@ class PollingStation(models.Model):
579592

580593
class Meta:
581594
db_table = u'polling_stations'
582-
595+

urls.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
from django.http import HttpResponseRedirect
44
from django.contrib import admin
55
from mainapp.feeds import LatestReports, LatestReportsByCity, LatestReportsByWard, LatestUpdatesByReport
6+
from contrib.django_restapi.responder import JSONResponder
7+
8+
# models
9+
from mainapp.models import Report, ReportJSON
10+
611

712
feeds = {
813
'reports': LatestReports,
@@ -80,24 +85,16 @@
8085
)
8186

8287
# REST
83-
json_report_resource = Collection(
84-
queryset = Report.objects.all(),
88+
json_report_resource = ReportJSON(
89+
queryset=Report.objects.all(),
8590
permitted_methods = ('GET', 'POST'),
8691
# expose_fields = ('id','point'),
8792
responder = JSONResponder()
8893
# responder = JSONResponder(paginate_by = 2)
8994
)
9095

91-
json_reportupdate_resource = Collection(
92-
queryset = ReportUpdate.objects.all(),
93-
permitted_methods = ('GET', 'POST'),
94-
responder = JSONResponder()
95-
#responder = JSONResponder(paginate_by = 10)
96-
)
97-
9896
urlpatterns += patterns('',
99-
url(r'^json/report/(.*?)/?$', json_report_resource),
100-
url(r'^json/reportupdate/(.*?)/?$', json_reportupdate_resource),
97+
url(r'^json/report/?$', json_report_resource),
10198
)
10299

103100

0 commit comments

Comments
 (0)