GeoDJangoに挑戦中 #3 JSONを吐くまで
参考URL
https://homata.gitbook.io/geodjango/geodjango/tutorial#restful-apino
モジュール追加
portsに無いのでpipから入れる。
pip install djangorestframework pip install djangorestframework-gis pip install django-filter pip install markdown
これらを(プロジェクト名)/settings.py
に登録します。
INSTALLED_APPS = [ ... 'rest_framework', 'rest_framework_gis', 'django_filters', ... ]
アプリの登録(やってない場合)
APPSに登録
(プロジェクト名)/settings.py
INSTALLED_APPS = [ ... (アプリ名), ... ]
(プロジェクト名)/urls.py から (アプリ名)/urls.py に引き継ぐ
(プロジェクト名)/urls.py
urlpatterns = [ ... url(r'^(アプリ名)/', include('(アプリ名).urls')), ... ]
シリアライザの作成
(アプリ名)/serializers.py
from rest_framework import serializers from .models import FieldPolygon class FieldPolygonSerializer(serializers.ModelSerializer): class Meta: model = FieldPolygon # fields = ('__all__') fields = ('gid', 'name', 'geom')
(アプリ名)/views.py
from rest_framework import viewsets from rest_framework_gis.filters import DistanceToPointFilter, InBBoxFilter from rest_framework.pagination import PageNumberPagination from .serializers import FieldPolygonSerializer from .models import FieldPolygon class MyPagination(PageNumberPagination): page_size_query_param = 'page_size' class FieldPolygonViewSet(viewsets.ModelViewSet): queryset = FieldPolygon.objects.all() serializer_class = FieldPolygonSerializer pagination_class = MyPagination filter_backends = (DistanceToPointFilter,) distance_filter_field = 'geom' distance_filter_convert_meters = True
http://.../(アプリ名)/json からリストを見れるようにする
(アプリ名)/urls.py
rom django.urls import path, include from rest_framework.routers import DefaultRouter from .views import FieldPolygonViewSet router = DefaultRouter() router.register('fieldpolygon', FieldPolygonViewSet) urlpatterns = [ path('json/', include(router.urls)), ]
ブラウザで見る ただし WKT で出る
http://(ホスト名):(ポート)/(アプリ名)/json
でアクセスすると、HTMLベースでビュー一覧を表示してくれます。
http://(ホスト名):(ポート)/(アプリ名)/json/(ビュー名)
で、ビューの中身を表示してくれます。
ただし、GeoJSONではなく、geom
はWKTで出ました。