Django

Django

【Django】比較検証 : DjangoとFlask、初心者に向いているのはどちらか

こんにちは、かつコーチです。これでDjango編は30本目、最終回です。「Pythonでウェブアプリを作りたいけど、DjangoとFlaskどちらから始めればいいですか」これは、Django編を通じて最もよく寄せられた質問です。どちらもPy...
Django

【Django】Django REST FrameworkでシンプルなTodo APIを作ってみる

こんにちは、かつコーチです。設計・アーキテクチャ編で扱った考え方を、ここで実際に手を動かして確認します。この記事では、DRF(Django REST Framework)でシンプルなTodo APIを最短ルートで組み立てます。モデル定義から...
Django

【Django】Djangoプロジェクトのアプリ分割のベストプラクティス

こんにちは、かつコーチです。Djangoはstartappでいくらでもアプリを追加できますが、「何を1つのアプリにまとめるか」の基準を持たずに開発を進めると、後から手がつけられなくなります。この記事では、Djangoプロジェクトのアプリ分割...
Django

【Django】Django REST Frameworkでシリアライザとアーキテクチャを設計する

こんにちは、かつコーチです。前回はFat Model・Skinny Viewの考え方を扱いましたが、DRFでAPIを組むと今度は「シリアライザに何を書くか」で同じ問題に突き当たります。シリアライザはバリデーションもデータ変換もできてしまうた...
Django

【Django】Fat Model・Skinny Viewの考え方とビジネスロジックの置き場所

こんにちは、かつコーチです。Djangoでアプリを育てていくと、いつの間にかviews.pyが数百行になり、条件分岐だらけで読めなくなる瞬間が来ます。原因の多くは、ビジネスロジックの置き場所が決まっていないことです。この記事では、Djang...
Django

【Django】shell_plusを使いこなすデバッグ術

こんにちは、かつコーチです。Djangoには標準でpython manage.py shellというコマンドがありますが、実際に使ってみると「モデルを毎回importするのが面倒」と感じたことはないでしょうか。筆者もこの手間が地味にストレス...
Django

【Django】DoesNotExist例外で落ちる画面を防ぐ方法

こんにちは、かつコーチです。「開発中は普通に動いていたのに、本番で存在しないIDにアクセスされたら500エラー画面になった」という経験はありませんか。筆者も実際に、URLの数字を適当に書き換えてアクセスされただけでサーバーエラーになるサイト...
Django

【Django】makemigrationsが競合して困った話と対処法

こんにちは、かつコーチです。チーム開発でDjangoを使っていると、ある日突然マイグレーションが動かなくなることがあります。筆者はチームで開発していたとき、自分のブランチでgit pullした直後にmigrateを実行したら、見たことのない...
Django

【Django】Djangoでよく出るエラーと解決法まとめ

こんにちは、かつコーチです。Djangoを学び始めると、赤い画面いっぱいに英語のエラーメッセージが表示されて、何をどう直せばいいのか分からなくなることがよくあります。筆者自身、最初の1ヶ月は「エラー画面が出るたびにコピペで検索する」を繰り返...
Django

【Django】django-environと.envで環境変数・秘密情報を管理する

こんにちは、かつコーチです。Djangoでアプリを作っていると、settings.pyにSECRET_KEYやデータベースのパスワードを直接書いてしまいがちです。ですがこのままGitHubにpushしてしまうと、秘密情報が世界中に公開されて...
Django

【Django】DjangoアプリをRenderにデプロイする方法

こんにちは、かつコーチです。ローカル環境でDjangoアプリが動くようになると、次にぶつかる壁が「これをインターネット上に公開するにはどうすればいいのか」という疑問です。AWSやHerokuなど選択肢は色々ありますが、初めてのデプロイには設...
Django

【Django】pytest-djangoでテストをもっと書きやすくする

こんにちは、かつコーチです。前回は標準のTestCaseによるテストの書き方を扱いました。TestCaseはDjangoに標準で組み込まれている分、追加のライブラリなしで始められるのが魅力です。一方で、テストの規模が大きくなってくると、クラ...
Django

【Django】Django TestCaseでモデル・ビューのテストを書く

こんにちは、かつコーチです。「動くには動いているけど、テストは書いたことがない」というDjango学習者は少なくありません。筆者自身も最初の頃は、機能を作っては手動でブラウザを操作して確認する、という進め方をしていました。しかしアプリが大き...
Django

【Django】CSRF対策とDjangoのセキュリティミドルウェアを理解する

こんにちは、かつコーチです。「フォームを送信したら403 Forbiddenが出た」「CSRFトークンって何のために必要なの?」という質問は、Djangoでフォームを扱い始めた頃に必ずと言っていいほど出てくる悩みです。この記事では、Djan...
Django

【Django】カスタムユーザーモデル(AbstractUser)を実装する

こんにちは、かつコーチです。前回の記事ではDjango標準のUserモデルを使ったログイン機能を扱いました。ただ実務では、標準のUserモデルをそのまま使い続けるプロジェクトはむしろ少数派です。「メールアドレスでログインさせたい」「電話番号...
Django

【Django】Django標準の認証システム(Userモデル)でログイン機能を作る

こんにちは、かつコーチです。前回はN+1問題とselect_related・prefetch_relatedによるパフォーマンス改善を解説しました。今回からは認証・セキュリティ分野に入り、Djangoに標準搭載されている認証システムを使った...
Django

【Django】N+1問題とselect_related・prefetch_relatedでの解決方法

こんにちは、かつコーチです。前回はフォーム(ModelForm)でのバリデーション実装を解説しました。今回は、DjangoのORMを使う上で避けて通れない「N+1問題」を、select_relatedとprefetch_relatedの比較...
Django

【Django】フォーム(forms.Form/ModelForm)でバリデーションを実装する

こんにちは、かつコーチです。前回はQuerySetの基本とフィルタの書き方を解説しました。今回は、ユーザーからの入力を受け取って検証する「フォーム」の実装方法を扱います。Djangoにはforms.Formとforms.ModelFormと...
Django

【Django】QuerySetの基本とフィルタの書き方

こんにちは、かつコーチです。前回はForeignKey・ManyToManyでモデル同士のリレーションを組む方法を解説しました。今回は、そのモデルからデータを取り出すときに必ず使う「QuerySet」の基本を扱います。SQLを書かずにデータ...
Django

【Django】ForeignKey・ManyToManyでリレーションを組む【Django】

こんにちは、かつコーチです。前回はモデルの基本フィールドとCRUD操作を解説しました。今回は、テーブル同士を関連づける「リレーション」の書き方を扱います。ブログアプリなら「記事とカテゴリ」「記事とタグ」のように、モデル同士がつながる場面は必...