Skip to content

頻出ライブラリ

DRFは、DjangoRESTful APIを構築するためのデファクトスタンダードです。シリアライザー、ビューセット、ルーターを組み合わせることで、CRUD操作を迅速に実装できます。

  • インストール: pip install djangorestframework
  • settings.py: INSTALLED_APPS'rest_framework'を追加します。
  • モデルとシリアライザーの定義: モデルとそれをJSONに変換するModelSerializerを作成します。
  • ビューセットとルーター: viewsets.ModelViewSetCRUD操作をまとめ、DefaultRouterURLを自動生成します。
myapp/views.py
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
# myproject/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from myapp.views import MyModelViewSet
router = DefaultRouter()
router.register(r'mymodels', MyModelViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]

これにより、/api/mymodels/で一覧取得や新規作成、/api/mymodels/<id>/で詳細取得や更新、削除が可能になります。

開発中にデータベースクエリやパフォーマンスのボトルネックを特定するのに役立つツールです。

  • インストール: pip install django-debug-toolbar
  • settings.py: INSTALLED_APPS'debug_toolbar'を追加し、MIDDLEWARE'debug_toolbar.middleware.DebugToolbarMiddleware'を追加します。INTERNAL_IPSにローカルIPアドレスを設定する必要があります。
settings.py
INSTALLED_APPS = [
# ...
'debug_toolbar',
]
MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]
INTERNAL_IPS = ['127.0.0.1']
  • urls.py: 開発環境でのみツールバーを有効にするため、urls.pyに設定を追加します。
myproject/urls.py
from django.urls import path, include
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
path('__debug__/', include(debug_toolbar.urls)),
] + urlpatterns

これで、開発サーバーを起動し、ブラウザでページにアクセスすると画面右側にデバッグパネルが表示されます。

Djangoで画像を扱う際の標準ライブラリです。ImageFieldと連携し、画像のアップロードや簡単な加工を可能にします。

  • インストール: pip install Pillow
  • モデルでの使用: ImageFieldをモデルに定義します。
  • リサイズ処理: ビューやモデルのsaveメソッドで、Pillowの機能を使って画像をリサイズします。
myapp/models.py
from django.db import models
from PIL import Image
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to='profile_pics')
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)

この例では、ユーザーが画像をアップロードするたびに、画像のサイズが300x300ピクセルを超える場合に自動でリサイズされます。

テンプレートでのフォームのレンダリングを簡素化し、BootstrapなどのCSSフレームワークに準拠した美しいフォームを簡単に作成します。

  • インストール: pip install django-crispy-forms
  • settings.py: INSTALLED_APPS'crispy_forms'を追加します。
  • テンプレートでの使用: フォームをレンダリングするテンプレートで{% load crispy_forms_tags %}を使い、{{ form|crispy }}のように記述します。
{% load crispy_forms_tags %}
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<button type="submit">Submit</button>
</form>

これにより、as_pas_tableのようなデフォルトのレンダリングより、はるかに見栄えの良いフォームが自動で生成されます。

時間のかかるタスクをバックグラウンドで非同期に実行するタスクキューです。Webサーバーがリクエストに素早く応答できるようになります。

  • インストール: pip install celery と、RedisRabbitMQなどのブローカーが必要です。
  • Celeryインスタンスの作成: Djangoプロジェクト内にCeleryインスタンスを作成します。
  • タスクの定義: @shared_taskデコレーターを使ってタスクを定義します。
myapp/tasks.py
from celery import shared_task
from django.core.mail import send_mail
@shared_task
def send_welcome_email(user_email):
send_mail(
'Welcome to Our App!',
'Thank you for registering.',
'from@example.com',
[user_email],
fail_silently=False,
)
  • タスクの呼び出し: ビューやモデルのシグナルからタスクを呼び出します。
myapp/views.py
from django.shortcuts import render
from .tasks import send_welcome_email
def register_user(request):
# ... ユーザー登録処理 ...
user_email = 'user@example.com'
send_welcome_email.delay(user_email) # 非同期タスクとして実行
return render(request, 'success.html')

delay()メソッドを使うことで、タスクがバックグラウンドで実行され、ビューの応答時間をブロックしません。

ソーシャル認証やアカウント管理機能(登録、ログイン、パスワードリセットなど)を簡単に実装します。

  • インストール: pip install django-allauth
  • settings.py: INSTALLED_APPS'allauth', 'allauth.account', 'allauth.socialaccount'を追加し、認証関連の設定を行います。
  • urls.py: allauthURLをインクルードします。
myproject/urls.py
from django.urls import path, include
urlpatterns = [
# ...
path('accounts/', include('allauth.urls')),
# ...
]

これにより、/accounts/login//accounts/signup/などのURLが自動で利用可能になります。

クラウドストレージ(Amazon S3など)にファイルを保存するためのバックエンドを提供します。

  • インストール: pip install django-storages と、使用するクラウドのSDK (boto3 for S3) が必要です。
  • settings.py: DEFAULT_FILE_STORAGEを設定し、クラウドストレージの認証情報を記述します。
settings.py
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
AWS_S3_REGION_NAME = 'ap-northeast-1'
# ... その他の認証情報 ...

この設定だけで、DjangoFileFieldImageFieldが、ローカルではなく指定されたS3バケットにファイルを自動でアップロードするようになります。

Djangoアプリケーションを本番環境で実行するためのWSGIサーバーです。

  • インストール: pip install gunicorn
  • 実行: プロジェクトのルートディレクトリから以下のコマンドを実行します。
Terminal window
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000

これは、myprojectディレクトリ内のwsgi.pyファイルにあるapplicationオブジェクトを使って、Gunicornをポート8000で実行する基本的なコマンドです。

モデルのデータをURLのクエリパラメータに基づいて簡単にフィルタリングできます。

  • インストール: pip install django-filter
  • settings.py: INSTALLED_APPS'django_filters'を追加し、REST_FRAMEWORKの設定でバックエンドを有効にします。
settings.py
INSTALLED_APPS = [
# ...
'django_filters',
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}
  • ビューでの使用: filterset_fieldsをビューに追加するだけでフィルタリングが可能になります。
myapp/views.py
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
filterset_fields = ['name', 'created_at'] # このフィールドでフィルタリング可能

これにより、/api/mymodels/?name=testのようなURLでデータを絞り込めるようになります。