Djangoで既に使っているDBの分析サーバーを立てよう<概観メモ>

ぱぱっとすぐ見た目のいいpythonでのAPIサーバー作成が作れるDjango. 毎回忘れるのでまとめます。

最終目標

  • 既存のDBからmodels.pyを作成する
  • api/articlesから記事一覧が見れるようにする
  • 上記を管理者のみ閲覧可能にする

Djangoについてわかっていればいいこと

Django のアーキテクチャーは、モデル・ビュー・コントローラー (MVC) パターンにほぼ従っており、1 つの層を変更しても他の層に影響を与えずに各層を単独で変更できるようにするために、アプリケーション・ロジック層、ユーザー・インターフェース (UI) 層、データ・アクセス層を分離しています。

モデル、テンプレート、ビューに加え、Django には設定なしですぐに使用できる高度な機能として、URL 構成、自動管理インターフェース、キャッシングなどが用意されています。

仮想環境の立ち上げ

virtualenv -p python3 myenv
cd myenv
source bin/activate

作成

django-admin startproject myapp[お好きに]

settings.pyのINSTALLED_APP に追加したアプリのディレクトリと'rest_framework'を加える。

サーバー起動

python3 manage.py runserver

インタラクティブシェル起動

python3 manage.py shell

管理画面

http://127.0.0.1:8000/admin/

既存のデータベースからの構成のmodels.pyへのインポート

python3 manage.py inspectdb > myapp/models.py
python3  manage.py migrate

管理者ユーザの作成

 python3  manage.py createsuperuser

Serializerの作成<データからどの項目を持ってきて整形するか>

myapp/serializers.py

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ('id', 'title', 'content') #ないとエラー。最近のバージョンはフィールドを明示的にする必要性があります。

myapp/apis.py

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

router = routers.DefaultRouter()
router.register(r'articles', ArticleViewSet) # /api/...につづくURL. つまりapi/articlesになります。api/に流す設定はmyapp/urls.pyで行います(下記)

url の登録

myapp/urls.py

from myapp import apis

urlpatterns = [
    url(r'^api/', include(apis.router.urls)), #=>  myapp/apis.pyに流れます。
]

ページネーション

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100
}

 管理者権限のみの閲覧

view.py

該当箇所のreturnにif条件足す

if request.user.is_superuser: