(2024-10-11更新)
メモを集めています。 未整理です。
参考リンク:
- Django公式ドキュメント
- Django Girlsのチュートリアル
- Django Class-Based-View Inspector -- Classy CBV - クラスベースビューの継承関係とメソッドの中身が見られるサイト
- python-jp.dev: "django", "django models" - PythonやDjangoについての記事が豊富なサイト
関連記事: Pythonについてのメモ
メモ:
- Djangoのインストール:
requirements.txt
にDjango~=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
- マイグレーション:
- 初期マイグレーション手順:
python manage.py makemigrations
→python manage.py migrate
- アプリ開発中のマイグレーション手順: モデルの変更 →
python manage.py makemigrations myapp
→python manage.py migrate myapp
- マイグレート時に実行されるSQLの表示:
python manage.py sqlmigrate myapp 0001
- どこまでマイグレーションされているか調べる:
python manage.py showmigrations
- マイグレーションを戻す:
python manage.py migrate myapp 0001_initial
(0001_initial 適用後まで戻す) - マイグレーションをすべて戻す:
python manage.py migrate myapp zero
- 初期マイグレーション手順:
- admin画面にモデルを表示する:
myapp.admin.py
にfrom .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.py
のDEFAULT_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']
- テストは