Django/GeoDjangoレシピ

Django/GeoDjangoの開発で役に立つ、ちょっとしたコツを紹介します。

プロジェクト名と設定ディレクトリ名を違うものにする

プロジェクト名と設定ディレクトリ名が同じ名前でわかりづらいということがあります。 この場合は、django-admin.pyでプロジェクトを作成するときに、設定ディレクトリを わかりやすいディレクトリ名にするという方法もあります。

通常の場合

(env) $ django-admin.py startproject myproj
myproj
├── manage.py
└── myproj
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

設定ディレクトリ名を変更した場合

(env) $ mkdir myproj
(env) $ cd myproj
(env) $ django-admin.py startproject config .
myproj
├── config
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Djangoの環境変数

設定ファイルのsettings.pyにパスワードやAPIキー等を直接に値を記述をすると GitHub等で管理したソースコードからパスワードが漏洩する恐れがあります。 環境変数ファイルから値を読み込むようにしておくとこれを防ぐことが出来ます。

環境変数ファイル.envを編集

設定ファイル config/settings.py を編集

GeoDjangoでGeoJSON Tile Layer

django-geojsonarrow-up-rightをインストールすると 「Tiled GeoJSON layer view」というViewが利用することが出来ます。

これに、JavaScriptライブラリのLeaflet GeoJSON Tile Layerarrow-up-rightを 組み合わせるとGeoJSONをタイルで読み込むことが出来ます。 ただし、Leaflet GeoJSON Tile LayerがLeaflet 0.7.7にしか対応してないこともあるので、紹介までに留めて起きます

django-geojson documentarrow-up-rightには、 他にも機能があるのでドキュメントを参考にしてみてください。

Djangoで非同期処理

Djangoで非同期処理をする場合は、分散タスク・キューのCelery - http://www.celeryproject.org/arrow-up-right を使う方法があります。

例として、TensorFlowを使った非同期処理を下記に記述します。

  • task queue based on message - Celery

  • used celery as broker - RabbitMQ, Redis

  • Worker Thread of Application - e.g. TensorFlow

参考

SQLでデータベースアクセス

直接にSQL文でデータベースにアクセスすることが出来ます。 複雑な空間演算をする時などでは、SQL文を直接記述する方が良いかと思います。

Djangoのモデルとして接続しているデータベースにアクセスする場合

外部のデータベースにアクセスする場合

参考

  • セキュリティの観点から、データベースの接続情報はソースコードに直接に記述をせずに、django-environ等で環境変数で設定することを推奨します。

Last updated