GeoDjangoのチュートリアル
PostGISに入力したデータを使った処理を作成して行きたいと思います。
RESTful APIの作成
leaflet.js等のJavaScriptとサーバとのインターフェースとしてRESTful APIを実装します。 DjangoでRESTful APIを実装する為に、Django REST framework(DRF)を使用します。 django-rest-framework-gisは、このDRFに地理空間機能拡張したモジュールです。
pipコマンドを使って追加をします。
djangorestframework-gis : RESTful APIモジュール Django REST framework(DRF)の地理空間機能拡張バージョン
django-filter : 検索機能モジュール
markdown : Markdown変換ライブラリ
(env) $ pip install djangorestframework-gis
(env) $ pip install django-filter # Filtering support
(env) $ pip install markdown # Markdown support for the browsable API.
(env) $ pip freeze
:
djangorestframework==3.8.2
djangorestframework-gis==0.13
django-filter==1.1.0
Markdown==2.6.11Note
leaflet.js - https://leafletjs.com/
Django REST framework(DRF) - http://www.django-rest-framework.org/
django-rest-framework-gis - https://github.com/djangonauts/django-rest-framework-gis
django-filter - https://django-filter.readthedocs.io/en/latest/index.html
markdown - https://python-markdown.github.io/
編集対象ファイル
geodjango/settings.py設定
インストールしたアプリケーションを設定ファイルのsettings.pyに追加します
world/serializers.py作成
シリアライザはデータベースとAPIのとの間でデータフォーマットの変換をします。 worldアプリにserializers.pyファイルを作成します。
world/views.py作成
ビューでリクエストに対するレスポンスの設定をします。
設定項目
queryset: クエリーデータ一覧
serializer_class: シリアライズ・デシリアライズで使用するserializer_classを指定
pagination_class: ページングの設定
filter_backends: データを絞り込む方法を設定
DistanceToPointFilter: 指定した点からの距離で絞り込むフィルタ
InBBoxFilter: バウンダリでの絞り込むフィルタ。南西端、北東端の経度、緯度を指定する
distance_filter_field: フィルタの対象フィールドを設定
bbox_filter_field: フィルタの対象フィールドを設定
distance_filter_convert_meters: 距離でのフィルター (??? 多分。。。。)
django-rest-framework-gisのフィルター
InBBOXFilter
GeometryFilter
GeoFilterSet
TMSTileFilter
DistanceToPointFilter
geodjango/urls.py設定
URLを設定します
router.registerにURLの接尾辞とViewを指定します。これをinclude(router.urls)で追加することで/api/配下のルーティングルールを登録します。
Browsable APIによる確認
Django REST frameworkのBrowsable APIを利用して、作成したREST APIの確認をします。
Webサーバを立ち上げて、http://localhost:8000/api/ にアクセスします。

行政区域データ
指定した点からの距離で絞り込むフィルタを指定
小学校区データ
指定した点からの距離で絞り込むフィルタを指定
公共施設データ
指定した点からの距離で絞り込むフィルタを指定
バス停留所データ
指定した点からの距離で絞り込むフィルタを指定
ページサイズとページ番号を指定
バウンダリを指定
データIDを指定
GeoJSON Serializer
GeoJSON Serializerを使ってLeafletでGeoJSONをマップに表示します。

編集対象ファイル
Note staticとtemplatesは、フレームワークで決められた静的データとテンプレートの置き場所で(geodjango/settings.pyで変更可能)、アプリケーション名の下にそれぞれのファイルを配置します。
geodjango/urls.py設定
2つのURLを設定します。
ルート”/”でマップ表示するURL
REST APIでGeoJSONをgetするURL
URLを設定します
static/world/css/app.css編集
マップページのCSSを記述します。
static/world/js/app.js編集
マップページのJavaSvriptを記述します。
templates/world/index.html編集
マップページのHTMLを記述します。
world/views.py編集
2つのビューを作成します。
REST APIでGeoJSONを返すビュー
マップ表示するビュー
REST APIでGeoJSONを返すビューを作成。札幌市中央区のポリゴンを返します。
マップ表示するビューを作成
ユーザ認証
Webサイトで公開した場合に誰でもアクセス可能な状態です。 サイト閲覧を権限を管理するためにアクセス制限機能をつけます。
編集対象ファイル
Note
ユーザ管理は、管理画面 http://127.0.0.1:8000/admin/ で行います。
ユーザ認証はセッションで行ってます。
デフォルトのセッション有効期間は2週間です
参考サイト
Django2 でユーザー認証(ログイン認証)を実装するチュートリアル -2- サインアップとログイン・ログアウト - https://it-engineer-lab.com/archives/544
ユーザー認証の機能はDjangoの標準で用意されています。ユーザ向けに表示するHTML等は別途作成する必要があります。
テンプレートを読み込むディレクトリを追加
ログイン関連のURLを設定します
アカウントにURLを追加
アクセス制限させたい関数に@login_requiredアノテーションをつけます
ログイン画面のHTMLを作成します
メインページで、http://127.0.0.1:8000/にアクセスした時に、ログインしてない時は、ログイン画面に遷移します。

Last updated






