はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

Djangoについてのメモ

(2024-10-11更新)

メモを集めています。 未整理です。

参考リンク:

関連記事: Pythonについてのメモ

メモ:

  • Djangoのインストール: requirements.txtDjango~=3.2.10 (バージョンは新しくする) を書き込んで pip install -r requirements.txt
  • プロジェクトの作成: django-admin startproject mysite .
  • アプリケーションの作成: python manage.py startapp myapp
  • 内蔵サーバの起動: python manage.py runserver, python manage.py runserver 0.0.0.0:8080
  • マイグレーション:
  • admin画面にモデルを表示する: myapp.admin.pyfrom .models import ModelName を入れる
  • スーパーユーザーの作成: python manage.py createsuperuser
  • 実行パスを取得する: django.conf.settings.BASE_DIR
  • メディアパスを取得する: django.conf.settings.MEDIA_ROOT (BASE_DIRからの相対パス)
  • URLパラメータを受け取る(参照: マゴトログ)
    • books/1 形式: urls.pyにpath('books/<int:id>/', views.get_books) → views.pyでdef get_books(request, id) で受け取る
    • books?id=1 形式: urls.pyにpath('books/, views.get_books) → views.pyでdef get_books(request)self.request.GET.get('id') で受け取る
    • books/1?keyword=ABC 形式: urls.pyにpath('books/<int:id>/', views.get_books) → views.pyでdef get_books(request, id)self.request.GET.get('keyword') で受け取る
  • 自動的につくIDフィールドの型: settings.pyDEFAULT_AUTO_FIELD='django.db.models.BigAutoField' で指定されている
    • もし変更されない場合にはアプリケーションの apps.py に記入されていることがある (Stack Overflow)
  • テンプレート:
    • テンプレートにコメントを入れる: {# コメント #} または {% comment %}〜{% endcomment %}
    • 動的パラメータのついたリンクを作成する: <a href="{% url 'path' %}?id=3">
  • モデルに対応するDBテーブル名を指定: モデルで class Meta: db_table='table1'
  • モデルが既存のテーブルを使う(テーブルを作成・削除しない): モデルで class Meta: managed=False
  • テスト(django.test):
    • テストは django.test.TestCase 等を継承する
    • setUp()self.client = Client() でテスト用クライアントを取得しておく
    • books/1?keyword=ABC 形式をGETする場合は response = self.client.get(reverse_lazy('books', kwargs={'id': 1}), {'keyword': 'ABC'}) とgetに2つの引数を渡す
    • レスポンスのステータスコード: response.status_code
    • レスポンスからコンテキスト変数を取得する response.context.get('book_name') または response.context['book_name']