実践Django Pythonによる本格Webアプリケーション開発(芝田 将)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. 実践Django Pythonによる本格Webアプリケーション開発

実践Django Pythonによる本格Webアプリケーション開発


形式:
書籍
発売日:
ISBN:
9784798153957
定価:
3,850(本体3,500円+税10%)
仕様:
B5変・312ページ
カテゴリ:
プログラミング・開発
キーワード:
#プログラミング,#開発環境,#開発手法,#Web・アプリ開発
紙の書籍

現場で役立つ実践的なノウハウを徹底解説

【Djangoとは】
Djangoは、Pythonで人気のあるフルスタックWebフレームワークです。
強力なテンプレートエンジンやO/Rマッパーに加え、ユーザー認証や国際化、管理画面など、Webアプリケーション開発で必要になるありとあらゆる機能を高い柔軟性で提供し、高速なWebアプリケーション開発を可能にします。

【本書のポイント】
本書は、業務で必ず役に立つ実践的なDjangoの解説書です。モデルやビュー、テンプレートといった基本コンポーネントの解説はもちろん、Djangoの実践的なテストテクニック、ユーザーモデルのカスタマイズ方法、認証処理のベストプラクティスなど、Web開発において必ず知っておくべき内容を幅広く取り上げました。
また実際に業務でWebアプリケーション開発に取り組む際には、これらの理解だけでは不十分なこともしばしばあります。
N+1問題の理解や対策方法、RDBのインデックスチューニングによるSQLの最適化、Web APIの実践的なページネーションの実装方法、CSRFやSQLインジェクションのような攻撃を防ぐためのセキュリティに関する知識など、高度かつ重要なトピックをDjangoのコントリビュート経験もある筆者が分かりやすく解説します。

【本書のゴール】
Djangoを使ったWebアプリケーション開発のベストプラクティスを把握し、業務に活かせる実践的な知識を身につけることを目指します。

【Djangoのバージョン】
Django 3.2 LTS対応(2024年4月までサポートされるバージョン)

【著者プロフィール】
芝田 将(しばた・まさし)
2017年株式会社サイバーエージェントに新卒入社後、ABEMA配信チームにて動画ストリーミングサーバーやトランスコーダーの開発を担当。
2019年より研究組織AI Labに異動し、機械学習モデルのハイパーパラメーター最適化ソフトウェアの研究開発に従事。
また2020年よりPython領域のDeveloper Expertsに選出される。OSS開発では、go-promptやkube-promptの開発者として知られる。
自動ハイパーパラメータ最適化フレームワークOptunaコミッター。Kubeflow/Katibレビュアー。Django, Gunicornコントリビューター。
共訳書『エキスパートPythonプログラミング改訂2版』(KADOKAWA、2018/2)。PyCon JP、Django Congress JPでの登壇経験多数。
NeurIPS 2020 Black-Box Optimization Challenge 世界5位入賞。

現場で役立つ実践的なノウハウを徹底解説
さらに高度なトピックも解説

第1章 コードスニペット共有サイトの開発
1.1 Djangoプロジェクトのはじめかた
1.2 Djangoアプリケーションの作成とHello World
1.3 データベースとの連携
1.4 テンプレートエンジンによるHTMLの生成
1.5 テンプレートの部品化とCSSの適用
1.6 ユーザー認証をサクッと作る
1.7 宿題:コメント機能の実装

第2章 モデル定義とクエリ操作
2.1 Django ORMによるモデル定義
2.2 Django ORMによるクエリ操作
2.3 N+1問題の概要とその対策
2.4 インデックスによる効率的なデータの取り出し
2.5 マイグレーション
2.6 SQLインジェクションによる攻撃を理解する

第3章 ビュー
3.1 ビューの基本
3.2 再利用性の高いビューの開発
3.3 URLディスパッチャー
3.4 HttpRequestとHttpResponseを使いこなす

第4章 テンプレートエンジン
4.1 Djangoテンプレート言語の基本
4.2 テンプレートエンジンの設定
4.3 テンプレートタグとテンプレートフィルターを使いこなす
4.4 テンプレートのセキュリティ対策

第5章 フォーム
5.1 フォームの基本と全体像
5.2 バリデーション処理のカスタマイズ
5.3 HTMLフォーム生成時のカスタマイズ
5.4 ModelFormをいつ使うべきか、あるいはいつ使うべきではないか
5.5 クロスサイトリクエストフォージェリ(CSRF)による攻撃を理解する

第6章 テスト
6.1 テストの観点と考え方
6.2 実践的なテストテクニック
6.3 テストに関連するツールチェイン
6.4 まとめ:さらにテストを使いこなすために

第7章 認証・認可
7.1 認証処理の基本とカスタマイズ
7.2 ユーザーモデルのカスタマイズ
7.3 権限管理(認可)
7.4 パターン別認証処理実装ガイド

第8章 Web API開発
8.1 Django REST FrameworkによるJSON APIの実装
8.2 Web APIの設計プラクティス

第9章 ケース別レシピ集
9.1 静的ファイルの配信
9.2 メッセージフレームワーク
9.3 国際化(多言語対応)
9.4 Eメールの送信
9.5 GunicornやuWSGIを使用する
9.6 デーモン管理ツールの導入
9.7 NginxをHTTP Proxyとして導入する
9.8 キャッシュフレームワーク
9.9 設定ファイルの分割
9.10 Django管理サイトのカスタマイズ
9.11 管理コマンドの作成

Appendix 関連リソース
A.1 参考資料(書籍)
A.2 参考資料(Webサイト)
A.3 本書で紹介したサードパーティーライブラリ一覧

付属データはこちら

会員特典はこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

  • 書籍のサポートページについて

    書籍、電子書籍のサポートページは以下になります。

    ・書籍サポートページ
    URL:https://www.shoeisha.co.jp/book/detail/9784798153957

    ・電子書籍サポートページ
    URL:https://www.shoeisha.co.jp/book/detail/9784798153964

この商品の「よくある質問」はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2023年08月28日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 vi
上から11行目
2刷
クロスタイリクエストフォージェリ
クロスサイトリクエストフォージェリ

※リフローEPUBの場合、「本書の対象読者と必要な事前知識、および構成」の「本書の構成」の5番目の段落が該当箇所です。
2021.07.20
1刷 ix
「サポートページ」のURL
3刷
https://www.shoeisha.co.jp/book/detail/9784798153964
https://www.shoeisha.co.jp/book/detail/9784798153957
2023.08.28
1刷 vii
表1,2
2刷
・ライブラリなど django-bootstrap4 ・バージョン 3.0.0
・ライブラリなど django-bootstrap5 ・バージョン 1.0.0

※リフローEPUBの場合、「本書のサンプルの動作環境と付属データ・会員特典データについて」の「本書のサンプルの動作環境」にある表1と表2が該当箇所です。
2021.07.21
1刷 004
図1.3
2刷
・URLの部分 http://localhost:8000/sunippets/new ・コードの部分 class Snippet(moidels.Model):
・URLの部分 http://localhost:8000/snippets/new/ ・コードの部分 class Snippet(models.Model):
2021.07.20
1刷 004
図1.4
2刷
・URLの部分 http://localhost:8000/sunippets/1/ ・コードの部分
Class Snippet(models.Model):
    code = models.TextField("コード".blank=True)

    class Meta():
        db_table = "sunippets"
・URLの部分 http://localhost:8000/snippets/1/ ・コードの部分
class Snippet(models.Model):
    code = models.TextField("コード", blank=True)

    class Meta:
        db_table = "snippets"
2021.07.20
1刷 012
図1.9
2刷
methid: GET
method: GET
2021.07.21
1刷 025
図1.15
3刷
2021.09.22
1刷 030
図1.18 左上「tatus 200」の箇所
3刷

「tatus 200」を「status 200」に修正しました。
2023.07.24
1刷 035
リスト1.20、リスト1.21のキャプション
2刷
リスト1.20 テンプレートエンジンの分岐処理 リスト1.21 テンプレートエンジンのforループ
リスト1.20 テンプレートエンジンのforループ リスト1.21 テンプレートエンジンの分岐処理
2021.07.28
1刷 058
リスト1.43のキャプション
2刷
snippets/static/snippets/style.css
snippets/static/snippets/css/style.css
2021.08.04
1刷 063
下から3行目
3刷
https://127.0.0.1:8000/login にアクセスして動作を確認してみましょう。
http://127.0.0.1:8000/accounts/login にアクセスして動作を確認してみましょう。

※リフローEPUBの場合、リスト1.49の下、3つ目の段落が該当箇所になります。
2023.07.15
1刷 066
リスト1.51
2刷
{% load bootstrap5 %}
{% load django_bootstrap5 %}
2021.08.04
1刷 075
モデルフィールドの一覧の部分
2刷
PostgreSQL:ArrayField、HStoreField、JSONField、IntegerRangeField、DateRange Field、...
PostgreSQL:ArrayField、HStoreField、IntegerRangeField、DateRange Field、...

※リフローEPUBの場合、「2.1.3 モデルフィールドの定義」の「モデルフィールドの一覧」の箇条書きが該当箇所になります。
2021.07.28
1刷 079
リスト(上から4~5行目)
2刷
def __str__(self):
    return f'{self.pk} {self.title}'
def __str__(self):
    return  f'{self.pk} {self.text}'

※リフローEPUBの場合、2章の図2.1の次に掲載されているリストが該当箇所になります。
2021.08.04
1刷 086
下部コード内(下から5行目)
2刷
class SnippetQuerySet(models.Manager):
class SnippetQuerySet(models.QuerySet):

※リフローEPUBの場合、「2.2.4 モデルマネージャーやQuerySetのカスタマイズ」の3つ目のリストが該当箇所になります。
2021.08.20
1刷 092
メモ
2刷
またMySQLではjoin_buffer_sizeパラメーターより・・・
またMySQLではjoin_buffer_sizeパラメーターにより・・・

※リフローEPUBの場合、「2.3.2 prefetch_relatedによる回避策」の直前にあるメモが該当箇所になります。
2021.07.28
1刷 108
2つの目のコード
3刷
class Snippet(models.Model):
    ...
    created_at = models.DateTimeField('登録日時', auto_now_add=True)  # Aさんが追加
class Snippet(models.Model):
    ...
    created_at = models.DateTimeField('登録日時', auto_now_add=True)  # Bさんが追加

(画像クリックで拡大)
class Snippet(models.Model):
    ...
    created_at = models.DateTimeField('登録日時', auto_now_add=True)  # Aさんが追加
class Snippet(models.Model):
    ...
    updated_at = models.DateTimeField('更新日時', auto_now=True)  # Bさんが追加

(画像クリックで拡大)

誤の方はソースコードが1つにくっついてしまっていますが、正のようにソースコードを2つに分けてください。

※リフローEPUBの場合、図2.8の直前のリストが該当箇所になります。
2021.10.01
1刷 114
図3.1
2刷
HttoRequest
HttpRequest
2021.07.21
1刷 117
(コード除く)本文上から7行目
2刷
例:b'{"message": "Hello World"')
例:b'{"message": "Hello World"}')

※リフローEPUBの場合、「3.1.3 HttpRequestオブジェクト」の箇条書きが該当箇所になります。
2021.08.20
1刷 119
メモのコード
2刷
from django.shortcuts import render, get_object_or_404
def snippet_detail(request, snippet_id):
    snippet = Snippet.objects.get(pk=snippet_id)
    return render(request, 'snippets/snippet_detail.html',
                  {'snippet': snippet})
from django.shortcuts import render, get_object_or_404

def snippet_detail(request, snippet_id):
    snippet = get_object_or_404(Snippet, pk=snippet_id)
    return render(request, 'snippets/snippet_detail.html',
                  {'snippet': snippet})

※リフローEPUBの場合、「3.1.5 例外を使ったエラー処理」のメモが該当箇所になります。
2021.07.28
1刷 121
(リスト除く)下から3行目
2刷
as_viewメソッド使用します。
as_viewメソッドを使用します。

※リフローEPUBの場合、「3.2.2 クラスベースビューやMixinを利用する」の1つ目のリストの次の段落が該当箇所になります。
2021.07.28
1刷 130
表3.1のハンドラー名
2刷
http400 http403 http404 http500
handler400 handler403 handler404 handler500
2021.07.28
1刷 134
図3.5
2刷
Messgae body
Message body
2021.07.21
1刷 135
(図除く)本文上から4行目
2刷
例:b'{"message": "Hello World"')
例:b'{"message": "Hello World"}')

※リフローEPUBの場合、「3.4.2 x-www-form-urlencoded形式のデータの読み込み」の最初の箇条書きが該当箇所になります。
2021.08.20
1刷 171
上から5行目のコード
2刷
{% extends"base.html" %}

{% block main %}
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
</form>
{% endblock %}
<!-- titleフィールドのラベルのテキストを変更 -->
<p>
    {{ form.title.errors }} <label for="{{ form.title.id_for_label }}">タイトル(必須)</label> {{ form.title }}
</p>
<p>
    {{ form.code.errors }} {{ form.code.label_tag }} {{ form.code }}
</p>
<p><!-- descriptionフィールドも同様に表示 --></p>

※リフローEPUBの場合、図5.1の次に掲載されているリストが該当箇所になります。
2021.08.20
1刷 184
上のリストの最終行
3刷
self.assertEqual(snippets[0].title, "title2")
self.assertEqual(snippets[0].title, "title1")

※リフローEPUBの場合、「6.1.2 モデルのテスト」の2つめのコードの最終行が該当箇所になります。
2023.07.15
1刷 222
図7.3
2刷
PermissionsMixim
PermissionsMixin
2021.08.20
1刷 240
上から4-6行目
3刷
>>> req = request.post('/api/snippets/', data={
...     'title': 'タイトル', 'description': '説明',
...     'code': 'print("Hello World")', 'created_by': 1})
>>> request.post('api/snippets/',
...     content_type='application/json',
...     data={'title':'タイトル','description':'説明',
...     'code':'print("Hello World"','created_by':1})

※リフローEPUBの場合、「8.1.1 SerializerによるJSONとの変換」の3つ目のグレー枠のコードが該当箇所になります。
2023.07.14
1刷 284,290
P.284:下から3行目、P.290:インデックス
2刷
drm-spectacular
drf-spectacular

リフローEPUBの場合、「A.3 本書で紹介したサードパーティーライブラリ一覧」の3つ目の項目が該当箇所になります。
2021.07.20
1刷 285, 290
P285:上から3つ目、P.290:インデックス
2刷
・P285 django-bootstrap4 GitHub   https://github.com/zostera/django-bootstrap4 公式ドキュメント   https://django-bootstrap4.readthedocs.io/ ・P290 django-bootstrap4
・P285 django-bootstrap5 GitHub: https://github.com/zostera/django-bootstrap5 公式ドキュメント: https://django-bootstrap5.readthedocs.io/en/latest/ ・P290 django-bootstrap5

リフローEPUBの場合、「A.3 本書で紹介したサードパーティーライブラリ一覧」の6つ目の項目が該当箇所になります。
2021.07.21

感想・レビュー

やご さん

2022-04-08

Python によるウェブアプリケーションフレームワーク・Django の解説本です。Ver. 3.2 対応です。Django の解説本は以前、「Djangoのツボとコツがゼッタイにわかる本」を読みました。あちらがウェブアプリケーションを作った経験に乏しい、あるいはまったくないといった初心者を想定した内容であったのに対し、こちらはある程度経験のある中級者向けだと思われます。(続く)→ https://gok.0j0.jp/nissi/1258.htm

まるしょう さん

2021-07-26

1章を写経。テストから開発するスタイルでとても実践的。2章以降は拾い読みですが、Djangoに限らずWebアプリ構築に大切なTipsがあり勉強になる。本格的にDjangoを触る際に再読予定。