頻出ライブラリ
Django REST Framework (DRF)
Section titled “Django REST Framework (DRF)”DRFは、DjangoでRESTful APIを構築するためのデファクトスタンダードです。シリアライザー、ビューセット、ルーターを組み合わせることで、CRUD操作を迅速に実装できます。
- インストール:
pip install djangorestframework settings.py:INSTALLED_APPSに'rest_framework'を追加します。- モデルとシリアライザーの定義: モデルとそれを
JSONに変換するModelSerializerを作成します。 - ビューセットとルーター:
viewsets.ModelViewSetでCRUD操作をまとめ、DefaultRouterでURLを自動生成します。
from rest_framework import viewsetsfrom .models import MyModelfrom .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer
# myproject/urls.pyfrom django.urls import path, includefrom rest_framework.routers import DefaultRouterfrom myapp.views import MyModelViewSet
router = DefaultRouter()router.register(r'mymodels', MyModelViewSet)
urlpatterns = [ path('api/', include(router.urls)),]これにより、/api/mymodels/で一覧取得や新規作成、/api/mymodels/<id>/で詳細取得や更新、削除が可能になります。
Django Debug Toolbar
Section titled “Django Debug Toolbar”開発中にデータベースクエリやパフォーマンスのボトルネックを特定するのに役立つツールです。
- インストール:
pip install django-debug-toolbar settings.py:INSTALLED_APPSに'debug_toolbar'を追加し、MIDDLEWAREに'debug_toolbar.middleware.DebugToolbarMiddleware'を追加します。INTERNAL_IPSにローカルIPアドレスを設定する必要があります。
INSTALLED_APPS = [ # ... 'debug_toolbar',]MIDDLEWARE = [ # ... 'debug_toolbar.middleware.DebugToolbarMiddleware', # ...]INTERNAL_IPS = ['127.0.0.1']urls.py: 開発環境でのみツールバーを有効にするため、urls.pyに設定を追加します。
from django.urls import path, includeif settings.DEBUG: import debug_toolbar urlpatterns = [ path('__debug__/', include(debug_toolbar.urls)), ] + urlpatternsこれで、開発サーバーを起動し、ブラウザでページにアクセスすると画面右側にデバッグパネルが表示されます。
Pillow
Section titled “Pillow”Djangoで画像を扱う際の標準ライブラリです。ImageFieldと連携し、画像のアップロードや簡単な加工を可能にします。
- インストール:
pip install Pillow - モデルでの使用:
ImageFieldをモデルに定義します。 - リサイズ処理: ビューやモデルの
saveメソッドで、Pillowの機能を使って画像をリサイズします。
from django.db import modelsfrom 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ピクセルを超える場合に自動でリサイズされます。
django-crispy-forms
Section titled “django-crispy-forms”テンプレートでのフォームのレンダリングを簡素化し、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_pやas_tableのようなデフォルトのレンダリングより、はるかに見栄えの良いフォームが自動で生成されます。
Celery
Section titled “Celery”時間のかかるタスクをバックグラウンドで非同期に実行するタスクキューです。Webサーバーがリクエストに素早く応答できるようになります。
- インストール:
pip install celeryと、RedisやRabbitMQなどのブローカーが必要です。 Celeryインスタンスの作成:Djangoプロジェクト内にCeleryインスタンスを作成します。- タスクの定義:
@shared_taskデコレーターを使ってタスクを定義します。
from celery import shared_taskfrom django.core.mail import send_mail
@shared_taskdef send_welcome_email(user_email): send_mail( 'Welcome to Our App!', 'Thank you for registering.', 'from@example.com', [user_email], fail_silently=False, )- タスクの呼び出し: ビューやモデルのシグナルからタスクを呼び出します。
from django.shortcuts import renderfrom .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()メソッドを使うことで、タスクがバックグラウンドで実行され、ビューの応答時間をブロックしません。
django-allauth
Section titled “django-allauth”ソーシャル認証やアカウント管理機能(登録、ログイン、パスワードリセットなど)を簡単に実装します。
- インストール:
pip install django-allauth settings.py:INSTALLED_APPSに'allauth','allauth.account','allauth.socialaccount'を追加し、認証関連の設定を行います。urls.py:allauthのURLをインクルードします。
from django.urls import path, include
urlpatterns = [ # ... path('accounts/', include('allauth.urls')), # ...]これにより、/accounts/login/、/accounts/signup/などのURLが自動で利用可能になります。
django-storages
Section titled “django-storages”クラウドストレージ(Amazon S3など)にファイルを保存するためのバックエンドを提供します。
- インストール:
pip install django-storagesと、使用するクラウドのSDK(boto3forS3) が必要です。 settings.py:DEFAULT_FILE_STORAGEを設定し、クラウドストレージの認証情報を記述します。
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'AWS_S3_REGION_NAME = 'ap-northeast-1'# ... その他の認証情報 ...この設定だけで、DjangoのFileFieldやImageFieldが、ローカルではなく指定されたS3バケットにファイルを自動でアップロードするようになります。
Gunicorn / uWSGI
Section titled “Gunicorn / uWSGI”Djangoアプリケーションを本番環境で実行するためのWSGIサーバーです。
- インストール:
pip install gunicorn - 実行: プロジェクトのルートディレクトリから以下のコマンドを実行します。
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000これは、myprojectディレクトリ内のwsgi.pyファイルにあるapplicationオブジェクトを使って、Gunicornをポート8000で実行する基本的なコマンドです。
django-filter
Section titled “django-filter”モデルのデータをURLのクエリパラメータに基づいて簡単にフィルタリングできます。
- インストール:
pip install django-filter settings.py:INSTALLED_APPSに'django_filters'を追加し、REST_FRAMEWORKの設定でバックエンドを有効にします。
INSTALLED_APPS = [ # ... 'django_filters',]REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],}- ビューでの使用:
filterset_fieldsをビューに追加するだけでフィルタリングが可能になります。
from rest_framework import viewsetsfrom .models import MyModelfrom .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer filterset_fields = ['name', 'created_at'] # このフィールドでフィルタリング可能これにより、/api/mymodels/?name=testのようなURLでデータを絞り込めるようになります。