LoginSignup
41
44

More than 3 years have passed since last update.

Django + REST Framework + GAE (+ Cloud Storage + Firebase Authentication )を始めるときに読む資料

Last updated at Posted at 2019-11-05

Pythonを使ってミニマルにAPIの開発をするなら、Django + REST Framework + GAE がとても便利です。この構成で始めるときに役立つ資料をまとめました。

Pythonもこれからという場合は、以下も参考にしてください。

Pythonを始めるときに読む資料 - Qiita

Django

Djangoの紹介

公式ドキュメント

Djangoは公式ドキュメントが非常に充実しているので、迷ったらまずは公式ドキュメントを読むのがおすすめです。

Django 2.2 日本語ドキュメント

場合によっては内部のコードを読んだほうが理解が早い場合もあります。認証モデル周りは、書き方の参考にもなります。

django/django

TIPS

Django ベスト・プラクティス - Qiita

Djangoプロジェクト構造のカスタマイズ(分割と構造化) - Qiita

Django + REST Framework のチュートリアル

REST Frameworkで何が便利になるのかがよくわかります。

Django REST Frameworkを使って爆速でAPIを実装する - Qiita

REST Framework

公式ドキュメント

REST Frameworkも公式ドキュメントが充実しているので、迷ったらまずは見ましょう。

Django REST framework

こちらもコードを読むと書き方の参考になります。

encode/django-rest-framework

TIPS

Django REST framework 知っておくと少し役に立つ 小技まとめ - Qiita

Djangoのモデル

Djangoは他のフレームワークに比べてモデル周りの規約の理解が必要です。

Model

Djangoのモデルにcreated_at,updated_atを実装する

Manager

DjangoのCustom ManagerとCustom QuerySetについて - Qiita

Query Set

DjangoのQuerySetのfilterメソッドの使い方まとめ | CodeLab

Migrations

Djangoのマイグレーションをロールバック、元に戻す方法

python manage.py migrate APP_NAME zero

MySql

Djangoの推奨はmysqlclientです。

Databases | Django documentation | Django

ただ、「Python Mysql」と検索してたどり着く記事はPyMySqlが使われていたりします。

PyMySQL

Djangoでmysqlに接続 - Qiita

[Python+MySQL] RuntimeError: cryptography is required - ITips

ここで注意しなければならないのが、現時点でPyMySqlがDjango2.2に対応できていません。

Django2.2 はPyMySqlに対応していません

そのため、PyMySqlを入れた場合は、mysqlclientに変更する必要があります。

PyMySqlからmysqlclientへの変更

Django: エラー解決法 "raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; 〜) django.core.exceptions.ImproperlyConfigured: 〜" | Yukun's Blog

認証

認証周りはDjangoが予め用意しているフレームワークもあったりで多少ややこしくなっています。とくにFirebase Authenticationや独自のモデルを使いたい場合などはカスタマイズが必要になります。

公式ドキュメント

Django の認証方法のカスタマイズ - 公式ドキュメント

認証周りのコード - django/django

参考記事

Django ユーザー カスタマイズ方法 - Qiita

ジャンゴ(django)のカスタムユーザーモデル(Custom User Model)

Django + REST Framework + Firebase Authentication

Firebase Authenticationを使う場合は、クライアントでToken取得 → サーバーで検証して一致するUserの取得という実装が必要になります。

Verify ID Tokens | Firebase

以下記事が具体的な手順の参考になります。

Django REST Frameworkでユーザ認証周りのAPIを作る - Qiita

Firebase Integration with Django REST - Stack Overflow

サードパーティーライブラリ

Django + REST Framework + Firebase Authenticationで動作するサードパーティーのライブラリです。Token認証周りを任せられるので便利です。

garyburgmann/drf-firebase-auth

Firebase Authenticationユーザーの各プロパティ取得方法

firebase/firebase-admin-python

GAE for Django

GAEでDjangoを動かすには公式ドキュメントを参考に、必要な設定をプロジェクトに追加します。

Django スタートガイド | Python | Google Cloud

GoogleCloudPlatform/python-docs-samples

requirements.txtやapp.yamlに必要な記述がなかったりすると下記エラーが出てハマるので、注意が必要です。

Traceback (most recent call last): File "/env/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker worker.init_process() File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 104, in init_process super(ThreadWorker, self).init_process() File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process self.load_wsgi() File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi self.wsgi = self.app.wsgi() File "/env/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load return self.load_wsgiapp() File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp return util.import_app(self.app_uri) File "/env/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app __import__(module) ModuleNotFoundError: No module named 'main'

GAE standard環境にて Python3 + Djangoでサーバを構築する - Qiita

Cloud Storage

Firebase Authenticationから取得したプロフィール画像などを保存するのにCloud Storageを使います。

Google Cloud Storage - django-storages 1.7.1 documentation

URLから画像を取得

Firebase Authenticationからは画像URLが提供されるので、それをダウンロードした上でCloud Storageに入れる必要があります。URLからの画像保存はメモリに展開後、DjangoStorageに渡します。

Django pattern: download to FileField

python3でurlretrieveの返り値が変わっおり、下記のコードだとエラーになります。古い記事のときは注意が必要です。↑の返り値が正しいです。

Django save image from url and connect with ImageField

Visual Studio Code

VSCodeを使ってて気になった部分を参考程度に載せておきます。

Djangoのmodel参照時のpylintの警告を出さないようにする - Qiita

VScodeのインデント幅を言語毎に指定する - Qiita

【pylint】 出力結果の警告についての備忘録 - Qiita

41
44
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
44