<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python | ビズドットオンライン</title>
	<atom:link href="https://it-biz.online/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://it-biz.online</link>
	<description></description>
	<lastBuildDate>Wed, 02 Aug 2023 03:01:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://it-biz.online/wp-content/uploads/2019/10/cropped-4a332f05ade4ac7bb3c46c472cb5eac8-32x32.png</url>
	<title>Python | ビズドットオンライン</title>
	<link>https://it-biz.online</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Django】テンプレートの仕組みと基本を３分で解説</title>
		<link>https://it-biz.online/python/template/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Mon, 10 Jul 2023 09:31:57 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8138</guid>

					<description><![CDATA[Djangoのテンプレート（template）は、Webアプリケーションで生成されるHTMLの骨格を作成し、その中に動的なデータを埋め込むための仕組みです。 このテンプレートシステムを理解することで、Pythonのコード [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://it-biz.online/python/django/">Django</a>のテンプレート（template）は、Webアプリケーションで生成される<a href="https://it-biz.online/web-design/html-basic/">HTML</a>の骨格を作成し、その中に動的なデータを埋め込むための仕組みです。</p>



<p>このテンプレートシステムを理解することで、<a href="https://it-biz.online/python/python-abc/">Python</a>のコードとHTMLの間でデータを効率よくやり取りし、見栄えの良いウェブページを容易に作成することが可能となります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このページでは、Djangoのテンプレートについて、初心者向けに１からわかりやすく整理して解説します。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>Djangoのテンプレートとは？</li>



<li>Djangoテンプレートの基本</li>



<li>Djangoテンプレートタグとフィルター</li>



<li>Djangoテンプレートでの静的ファイルの扱い</li>



<li>Djangoテンプレートの継承</li>
</ul>
</div>
</div></div>



<p>Djangoを用いたWeb開発を行いたい人であれば、<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つです。</span></strong>是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Django「テンプレート」とは何か？</a></li><li><a href="#toc2" tabindex="0">Djangoテンプレートの基本</a><ol><li><a href="#toc3" tabindex="0">Django：テンプレート変数</a></li><li><a href="#toc4" tabindex="0">Django：テンプレートタグ</a></li></ol></li><li><a href="#toc5" tabindex="0">Djangoテンプレートの作成と使用方法</a><ol><li><a href="#toc6" tabindex="0">テンプレート（HTMLファイル）の作成</a></li><li><a href="#toc7" tabindex="0">テンプレートの使用</a></li></ol></li><li><a href="#toc8" tabindex="0">Django：テンプレート（template）のまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Django「テンプレート」とは何か？</span></h2>



<p>Djangoのテンプレートとは、Webアプリケーションの画面の骨格を表すHTMLファイルのことを指します。Djangoでは、このテンプレートファイルに<strong><span class="marker-under">Pythonのコードから動的に値を受け渡すことで、さまざまな画面を表示させることができます。</span></strong></p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="539" src="https://it-biz.online/wp-content/uploads/2023/07/image-4-1024x539.png" alt="Django テンプレート" class="wp-image-8141" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-4-1024x539.png 1024w, https://it-biz.online/wp-content/uploads/2023/07/image-4-300x158.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-4-500x263.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-4-768x405.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-4-800x421.png 800w, https://it-biz.online/wp-content/uploads/2023/07/image-4.png 1029w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">図1：Django テンプレート</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>テンプレートを使用することで、Webページの見た目（HTML）とロジック（Pythonコード）を明確に分けることができ、コードの整理整頓、保守、再利用を容易にし、チームでの開発をスムーズにすることができます。</p>
</div></div>



<p>それでは、早速テンプレートの基本的な作成方法と、その利用方法を解説していきます。</p>



<h2 class="wp-block-heading"><span id="toc2">Djangoテンプレートの基本</span></h2>



<p>DjangoのテンプレートはHTMLファイルの形で保存され、主に2つの部分から成り立ちます。</p>



<ol class="wp-block-list">
<li>HTML</li>



<li>テンプレートタグ or テンプレート変数</li>
</ol>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="714" height="483" src="https://it-biz.online/wp-content/uploads/2023/07/image-6.png" alt="" class="wp-image-8145" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-6.png 714w, https://it-biz.online/wp-content/uploads/2023/07/image-6-300x203.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-6-500x338.png 500w" sizes="(max-width: 714px) 100vw, 714px" /><figcaption class="wp-element-caption">図2：テンプレート変数</figcaption></figure>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/html-rule/">HTMLファイルの書き方・作り方</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>骨格となるHTMLファイルに、<a href="https://it-biz.online/it-skills/variable/">変数</a>を埋め込んでおき、その変数にPythonから値を渡して１つの画面を作成するようなイメージ。</p>
</div></div>



<p>このようにテンプレートを利用して、各場面に応じて修正が必要な部分だけをPythonから渡してあげることで、様々な画面を作成できる仕組みがテンプレートです。</p>



<p>Djangoのテンプレート変数とテンプレートタグの使い方を解説します。</p>



<h3 class="wp-block-heading"><span id="toc3">Django：テンプレート変数</span></h3>



<p><strong>テンプレート変数</strong>は <code><span class="bold-blue">{{ variable_name }}</span></code> の形でHTMLファイル内に記述します。ここには、Pythonから受け取った値（文字列、数値、リスト、オブジェクトなど）が挿入されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;p>Hello, {{ name }}!&lt;/p></pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/paragraph/">HTML：pタグ</a></p>



<p>ここでの <code>name</code> はテンプレート変数です。ここに Python コードから値が渡されれば、その値が表示さる仕組み。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、<code>name</code> に "John" という文字列が渡されれば、生成されるHTMLは以下のようになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;p>Hello, John!&lt;/p></pre>
</div></div>



<h3 class="wp-block-heading"><span id="toc4">Django：テンプレートタグ</span></h3>



<p>一方、<strong>テンプレートタグ</strong>は <code><span class="bold-blue">{% tag %}</span></code> の形でテンプレートに記述され、より複雑なロジックや制御フローをHTMLに組み込むことができます。</p>



<p>テンプレートタグにはさまざまな種類があり、条件分岐（<code>{% if %}</code>、<code>{% else %}</code>）、ループ（<code>{% for %}</code>）、テンプレートの継承やインクルード（<code>{% extends %}</code>、<code>{% include %}</code>）など、多くの操作を行うことができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、以下のコードでは、<code>item_list</code> の各要素に対してループを行い、リストの要素をHTMLに挿入しています。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;ul>
{% for item in item_list %}
    &lt;li>{{ item }}&lt;/li>
{% endfor %}
&lt;/ul></pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/list/">liタグ</a> / <a href="https://it-biz.online/python/python-list/">Pythonのリスト</a></p>



<p><code>item_list</code> はPythonから渡されたリストで、その各要素が <code>item</code> としてHTMLに埋め込まれます。</p>



<p>例えば、<code>item_list</code> に <code>["Apple", "Banana", "Cherry"]</code> というリストが渡された場合、生成されるHTMLは以下のようになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;ul>
    &lt;li>Apple&lt;/li>
    &lt;li>Banana&lt;/li>
    &lt;li>Cherry&lt;/li>
&lt;/ul></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このように、Djangoテンプレートタグを使うと、HTMLの生成をPythonのコードで制御することができます。</p>
</div></div>



<p>Djangoのテンプレートタグは多種多様。ここで、最も一般的に使用されるタグをいくつか取り上げ、その機能と使い方を表形式で整理しておきます。</p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>テンプレートタグ</th><th>説明</th><th>使用例</th></tr></thead><tbody><tr><td><code>{% for %}</code>、<code>{% endfor %}</code></td><td>リストの各要素に対してループを行う。</td><td><code>{% for item in item_list %}&lt;li&gt;{{ item }}&lt;/li&gt;{% endfor %}</code></td></tr><tr><td><code>{% if %}</code>、<code>{% endif %}</code></td><td>条件分岐を行う。</td><td><code>{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}</code></td></tr><tr><td><code>{% else %}</code></td><td><code>if</code> タグまたは <code>for</code> タグと一緒に使用して、条件が満たされなかった場合の動作を定義する。</td><td><code>{% if user.is_authenticated %}Hello, {{ user.username }}.{% else %}Please log in.{% endif %}</code></td></tr><tr><td><code>{% elif %}</code></td><td><code>if</code> タグと一緒に使用して、複数の条件をチェックする。</td><td><code>{% if user.is_admin %}Admin{% elif user.is_staff %}Staff{% else %}User{% endif %}</code></td></tr><tr><td><code>{% empty %}</code></td><td><code>for</code> タグと一緒に使用して、リストが空の場合の動作を定義する。</td><td><code>{% for item in item_list %}&lt;li&gt;{{ item }}&lt;/li&gt;{% empty %}&lt;li&gt;No items.&lt;/li&gt;{% endfor %}</code></td></tr><tr><td><code>{% extends %}</code></td><td>他のテンプレートを継承する。</td><td><code>{% extends "base.html" %}</code></td></tr><tr><td><code>{% block %}</code>、<code>{% endblock %}</code></td><td><code>extends</code> タグで継承されたテンプレートで上書き可能な領域を定義する。</td><td><code>{% block content %}This is the content.{% endblock %}</code></td></tr><tr><td><code>{% include %}</code></td><td>他のテンプレートを現在の位置に挿入する。</td><td><code>{% include "header.html" %}</code></td></tr><tr><td><code>{% static %}</code></td><td>静的ファイルへのURLを生成する。</td><td><code>&lt;img src="{% static "images/logo.png" %}"&gt;</code></td></tr><tr><td><code>{% url %}</code></td><td>DjangoのURLパターン名からURLを動的に生成する</td><td><code>&lt;a href="{% url 'homepage' %}"&gt;Home&lt;/a&gt;</code></td></tr><tr><td><code>{% csrf_token %}</code></td><td>CSRF保護のためのトークンを出力する。通常はPOSTフォーム内で使用する。</td><td><code>&lt;a href="{% url 'homepage' %}"&gt;Home&lt;/a&gt;</code></td></tr><tr><td><code>{% load %}</code></td><td>カスタムテンプレートタグやフィルタを読み込む。</td><td><code>{% load custom_tags %}</code></td></tr></tbody></table></div></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次の章では、Djangoテンプレートの作成方法について詳しく解説します。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc5">Djangoテンプレートの作成と使用方法</span></h2>



<p>上記の基本知識を踏まえ、早速Djangoテンプレートの作成と使用方法を実際に見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">テンプレート（HTMLファイル）の作成</span></h3>



<p>テンプレートは基本的にはHTMLファイルであり、Djangoプロジェクト内のアプリケーションフォルダにある<code>templates</code>ディレクトリに保存されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、<code>myapp</code>という名前のアプリケーションがある場合、テンプレートは<code><span class="bold-blue">myapp/templates/</span></code>ディレクトリに配置します。</p>
</div></div>



<p>↓のような簡単なテンプレートを作成してみます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- myapp/templates/hello.html -->

&lt;!DOCTYPE html>
&lt;html>
&lt;head>
    &lt;title>Hello Django&lt;/title>
&lt;/head>
&lt;body>
    &lt;h1>Hello, {{ name }}!&lt;/h1>
&lt;/body>
&lt;/html></pre>



<p>このテンプレートでは、<code>{{ name }}</code>というテンプレート変数を使用しており、この部分は後でPythonコードから受け取った値に置き換えられます。</p>



<h3 class="wp-block-heading"><span id="toc7">テンプレートの使用</span></h3>



<p>Djangoのビューでテンプレートを使用するには、<strong><span class="marker-under"><a href="https://it-biz.online/python/render/"><code>render</code>関数</a></span></strong>を使います。この関数は、指定したテンプレートを使用してHTTPレスポンスを生成します。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/def/">Pythonの関数とは？</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次のコードは、上記のテンプレートを使って"Hello, Django!"と表示するビューの例です。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># myapp/views.py

from django.shortcuts import render

def hello(request):
    return render(request, 'hello.html', {'name': 'Django'})</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文</a> / <a href="https://it-biz.online/python/views/">views.py（ビューとは？）</a></p>



<p>このビューでは、<code>render</code>関数を使って<code>hello.html</code>テンプレートをレンダリングしています。3つ目の引数<code>{'name': 'Django'}</code>は、テンプレートに渡すコンテキストとなり、この例ではテンプレート変数<code>{{ name }}</code>が'Django'に置き換えられます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>render関数の詳しい使い方や利用する際の注意点は以下の記事をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/render/" title="【Django】render関数の使い方をわかりやすく３分で解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/07/render-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/07/render-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/07/render-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/07/render-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Django】render関数の使い方をわかりやすく３分で解説</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】Djangoのrender関数の使い方を、基本的な概念から具体的なコード例までわかりやすく解説。初心者でも理解できるよう、用途や構文、利用時の注意点についても３分間で効率的にご説明。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.07.10</div></div></div></div></a>
</div></figure>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以上がDjangoテンプレートの基本的な作成と使用方法です。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc8">Django：テンプレート（template）のまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center is-style-cross-line has-box-style"><strong>Djangoテンプレート</strong></p>



<ol class="wp-block-list">
<li>DjangoのテンプレートはWebアプリケーションの画面（ビュー）の骨格を形成するHTMLファイル。</li>



<li>データを動的に埋め込むことで、同じテンプレートから異なる画面を作成可能。</li>



<li>HTMLとPythonコードを分離し、保守性と再利用性を向上させることが可能。</li>
</ol>



<p class="has-text-align-center is-style-cross-line has-box-style"><strong>テンプレート変数</strong></p>



<ol class="wp-block-list">
<li>テンプレート変数はPythonから受け取ったデータをHTMLに埋め込むためのプレースホルダ。</li>



<li>テンプレート変数は <code>{{ variable_name }}</code> の形式で記述される。</li>



<li>テンプレート変数はPythonの値（文字列、数値、リスト、オブジェクトなど）をその場所に表示。</li>
</ol>



<p class="has-text-align-center is-style-cross-line has-box-style"><strong>テンプレートタグ</strong></p>



<ol class="wp-block-list">
<li>テンプレートタグはHTMLテンプレートに制御構造を追加するための構文。</li>



<li>テンプレートタグは <code>{% tag %}</code> の形式で記述される。</li>



<li>ループ（<code>for</code>）、条件分岐（<code>if</code>）、テンプレートの継承やインクルード（<code>extends</code>、<code>include</code>）など、さまざまな制御構造を表現可能。</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html>
&lt;head>
    &lt;title>{{ title }}&lt;/title>
    &lt;link rel="stylesheet" href="{% static 'styles.css' %}">
&lt;/head>
&lt;body>
    &lt;header>
        &lt;h1>{{ header }}&lt;/h1>
    &lt;/header>
    
    &lt;main>
        &lt;h2>Welcome, {{ username }}!&lt;/h2>
        &lt;p>Here are some of your favorite fruits:&lt;/p>
        &lt;ul>
        {% for fruit in favorite_fruits %}
            &lt;li>{{ fruit }}&lt;/li>
        {% empty %}
            &lt;li>No favorite fruits found.&lt;/li>
        {% endfor %}
        &lt;/ul>
    &lt;/main>
    
    &lt;footer>
        {% include 'footer.html' %}
    &lt;/footer>
&lt;/body>
&lt;/html></pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/main/">mainタグ</a></p>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>初めてPython/Djangoを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Django】テンプレートの継承（extends/block）を３分で解説</title>
		<link>https://it-biz.online/python/template-inheritance/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 11 Jul 2023 06:51:05 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8166</guid>

					<description><![CDATA[このページでは、Djangoのテンプレートシステムにおける１つの核心的な概念「テンプレートの継承」について詳しく説明します。 参考　Djangoのテンプレートとは？ テンプレートの継承とは、一言で言うと、既存のテンプレー [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>このページでは、<a href="https://it-biz.online/python/django/">Django</a>のテンプレートシステムにおける１つの核心的な概念「テンプレートの継承」について詳しく説明します。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/template/">Djangoのテンプレートとは？</a></p>



<p>テンプレートの継承とは、一言で言うと、<strong>既存のテンプレート（通常はベースとなるテンプレート）から特定の部分を再利用し、その上で新たな要素を追加したり、既存の要素をオーバーライド（上書き）したりすることを可能にする機能</strong>です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="876" height="365" src="https://it-biz.online/wp-content/uploads/2023/07/image-9.png" alt="テンプレートの継承" class="wp-image-8169" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-9.png 876w, https://it-biz.online/wp-content/uploads/2023/07/image-9-300x125.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-9-500x208.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-9-768x320.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-9-800x333.png 800w" sizes="(max-width: 876px) 100vw, 876px" /><figcaption class="wp-element-caption">図1：テンプレートの継承</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このページでは、テンプレートの継承とは何か？そのメリットと使用方法、さらには実践的な例とベストプラクティスを含む具体的な応用例を紹介します。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>テンプレートの継承とは</li>



<li>テンプレートの継承の使い方</li>



<li>テンプレートの継承の実践的な例</li>



<li>テンプレートの継承と再利用のベストプラクティス</li>
</ul>
</div>
</div></div>



<p>Djangoを用いたWeb開発を行いたい人であれば、<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つです。</span></strong>是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Django：テンプレートの継承とは</a></li><li><a href="#toc2" tabindex="0">ベーステンプレートの作成</a><ol><li><a href="#toc3" tabindex="0">Django：blockタグ</a></li></ol></li><li><a href="#toc4" tabindex="0">子テンプレートの作成とベーステンプレートからの継承</a><ol><li><a href="#toc5" tabindex="0">継承するHTMLファイルの指定</a></li></ol></li><li><a href="#toc6" tabindex="0">Django：extends/blockのまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Django：テンプレートの継承とは</span></h2>



<p>テンプレートの継承とは、あるテンプレート（一般的にはベーステンプレートと呼ばれます）が持つ<strong>一部または全部の構造や要素を再利用し、新たなテンプレートを作る方法</strong>を指します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、画面のヘッダーやフッターを定義するベーステンプレートを用意しておいて、そのテンプレートをもとに、ヘッダーやフッターだけを編集した別のテンプレートを作るようなイメージ。</p>
</div></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="772" height="592" src="https://it-biz.online/wp-content/uploads/2023/07/image-10.png" alt="Django テンプレートのイメージ" class="wp-image-8170" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-10.png 772w, https://it-biz.online/wp-content/uploads/2023/07/image-10-300x230.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-10-500x383.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-10-768x589.png 768w" sizes="(max-width: 772px) 100vw, 772px" /><figcaption class="wp-element-caption">図2：Django テンプレートのイメージ</figcaption></figure>



<p>これは、DjangoがDRY（Don't Repeat Yourself）というコーディング原則を反映したもので、同じコードを何度も書く必要を減らし、保守性と効率性を向上させるための機能の１つ。</p>



<p>テンプレートの継承を理解するために、以下の２点について学習していきます。</p>



<ol class="wp-block-list">
<li><strong>基底テンプレートの作成：</strong> Djangoのテンプレートシステムでは、ベースとなるテンプレートを作成し、その中に再利用したいHTMLの構造や要素を定義。ナビゲーションバー、フッター、スタイルシートのリンク、スクリプトのリンクなど、複数のページで共有される要素を含みます。</li>



<li><strong>ブロックの定義とオーバーライド：</strong> ベーステンプレートには、子テンプレートでオーバーライド（上書き）または追加できるブロックを定義します。これらのブロックは、ページタイトル、メインコンテンツ、追加のスタイルシートなど、ページによって異なる可能性のある部分を占めます。</li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記２点についてステップバイステップで解説していきます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc2">ベーステンプレートの作成</span></h2>



<p>まず、ベース（親）テンプレートを作成します。このベーステンプレートには、<strong><span class="marker-under">すべてのテンプレートから共有される「共通のHTML構造」を定義</span></strong>します。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/html-basic/">HTMLとは？</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下がベーステンプレート（<code>base.html</code>）の例です。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html lang="ja">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;title>{% block title %}デフォルトタイトル{% endblock title %}&lt;/title>
    &lt;!-- その他のメタ情報、スタイルシートのリンクなど -->
&lt;/head>
&lt;body>
    &lt;header>
        &lt;!-- ヘッダーの内容 -->
    &lt;/header>

    &lt;main>
        {% block content %}
        &lt;!-- この部分は子テンプレートでオーバーライドされます -->
        {% endblock content %}
    &lt;/main>

    &lt;footer>
        &lt;!-- フッターの内容 -->
    &lt;/footer>

    &lt;!-- その他のスクリプトなど -->
&lt;/body>
&lt;/html></pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/html-rule/">HTMLの基本構造・書き方</a> / <a href="https://it-biz.online/web-design/header/">&lt;header>タグ</a> /<a href="https://it-biz.online/web-design/main/">&lt;main>タグ</a></p>



<p>ここでは<code>{% block title %}</code>と<code>{% block content %}</code>の2つのブロックを定義しています。これらは子テンプレートでオーバーライドすることができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここで、blockタグについて詳細を補足します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc3">Django：blockタグ</span></h3>



<p><code>block</code> は<strong>テンプレート内で再利用可能なセクションを定義するためのタグ</strong>です。ベーステンプレートでは <code>block</code> を使用して子テンプレートで上書き（オーバーライド）できるセクションを定義します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% block blockname %}
    Default content...
{% endblock %}</pre>



<p><code><span class="bold-blue">blockname</span></code> はブロックの名前（任意の名前）で、<code><span class="bold-blue">Default content...</span></code> はブロックのデフォルトコンテンツ（子テンプレートでオーバーライドされない場合に表示される部分）です。</p>



<p>このblockタグを利用した部分は、次に解説する子テンプレートで上書きをすることが可能になるということです。</p>



<h2 class="wp-block-heading"><span id="toc4">子テンプレートの作成とベーステンプレートからの継承</span></h2>



<p>次に、ベーステンプレートから継承する子テンプレートを作成します。</p>



<p>子テンプレートでは、<code><span class="bold-blue">{% extends "base.html" %}</span></code>を使用して基底テンプレートから継承を行い、<code><span class="bold-blue">{% block %}</span></code>タグを使用して基底テンプレートのブロックをオーバーライドします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% extends "base.html" %}

{% block title %}マイページ{% endblock title %}

{% block content %}
    &lt;h1>ようこそ、マイページへ！&lt;/h1>
    &lt;!-- その他のコンテンツ -->
{% endblock content %}</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/h1-h6/">hタグ</a></p>



<p>この子テンプレートでは、基底テンプレートの<code>title</code>ブロックと<code>content</code>ブロックをオーバーライドしています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>分かりやすく言うと、<strong>１行目のextendsタグで「base.html」をテンプレートにするよ！</strong>と宣言。<br>そして、blockタグで「<strong>この部分はこの内容で上書きするよ！</strong>」という処理を書いています。</p>
</div></div>



<p>具体的なサンプルコードを見てみましょう。</p>



<p>例えば、以下のようなベーステンプレートがあるとします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html>
&lt;head>
    &lt;title>{% block title %}デフォルトタイトル{% endblock %}&lt;/title>
&lt;/head>
&lt;body>
    &lt;header>
        &lt;nav>
            &lt;!-- ナビゲーションメニュー -->
        &lt;/nav>
    &lt;/header>

    &lt;main>
        {% block content %}
        &lt;!-- デフォルトコンテンツ:子テンプレートでオーバーライド予定 -->
        {% endblock %}
    &lt;/main>

    &lt;footer>
        &lt;!-- フッター情報 -->
    &lt;/footer>
&lt;/body>
&lt;/html></pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/nav/">navタグ</a></p>



<p>このテンプレートをもとに、<code>{% block %}</code>タグを使ってベーステンプレートのブロックをオーバーライド↓。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% extends "base.html" %}

{% block title %}
マイページ
{% endblock %}

{% block content %}
&lt;h1>ようこそ、マイページへ！&lt;/h1>
&lt;p>ここは、ユーザーのマイページです。&lt;/p>
{% endblock %}</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/paragraph/">pタグ（段落タグ）</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こうすることで、ベーステンプレートをもとにして、必要な部分だけを上書きした画面が出来上がるというわけです。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="774" height="311" src="https://it-biz.online/wp-content/uploads/2023/07/image-11.png" alt="" class="wp-image-8171" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-11.png 774w, https://it-biz.online/wp-content/uploads/2023/07/image-11-300x121.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-11-500x201.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-11-768x309.png 768w" sizes="(max-width: 774px) 100vw, 774px" /><figcaption class="wp-element-caption">図3：ベーステンプレートからの継承</figcaption></figure>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-info-circle"><span class="tab-caption-box-label-text block-box-label-text box-label-text">テンプレートの継承の実践的な例</span></div><div class="tab-caption-box-content block-box-content box-content">
<p>ここでは、ブログアプリを開発する場合の例を用いて、具体的にテンプレートの継承がどのように活用されるか？をご紹介します。</p>



<p class="has-text-align-center"><span class="badge-blue">ステップ１</span>　<strong>基底テンプレートの作成</strong></p>



<p>ブログの全てのページで共有される要素（例えばナビゲーションバー、フッター、ヘッダー画像等）を含む基底テンプレート(<code>base.html</code>)を作成します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html lang="ja">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;title>{% block title %}My Blog{% endblock title %}&lt;/title>
    &lt;!-- その他のメタ情報、スタイルシートのリンクなど -->
&lt;/head>
&lt;body>
    &lt;header>
        &lt;!-- ヘッダーの内容 -->
    &lt;/header>

    &lt;nav>
        &lt;!-- ナビゲーションバーの内容 -->
    &lt;/nav>

    &lt;main>
        {% block content %}
        &lt;!-- この部分は子テンプレートでオーバーライドされます -->
        {% endblock content %}
    &lt;/main>

    &lt;footer>
        &lt;!-- フッターの内容 -->
    &lt;/footer>

    &lt;!-- その他のスクリプトなど -->
&lt;/body>
&lt;/html></pre>



<p class="has-text-align-center"><span class="badge-blue">ステップ２</span>　<strong>ブログ投稿ページのテンプレート作成</strong></p>



<p>次に、基底テンプレートから継承したブログ投稿ページのテンプレート(<code>post_detail.html</code>)を作成します。このテンプレートでは、基底テンプレートの<code>content</code>ブロックをオーバーライドします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% extends "base.html" %}

{% block title %}
{{ post.title }} - My Blog
{% endblock title %}

{% block content %}
    &lt;h1>{{ post.title }}&lt;/h1>
    &lt;p>{{ post.content }}&lt;/p>
{% endblock content %}</pre>



<p>上記のようにして、すべてのページで共有される基本的なHTML構造を維持しつつ、個々のページで異なる内容を表示できます。これにより、コードの重複を避け、保守性と可読性を向上させることができます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc5">継承するHTMLファイルの指定</span></h3>



<p>Djangoでは<code>extends</code>タグを使って他のテンプレートを継承する際、<strong><span class="marker-under">テンプレートファイルの位置は<code>TEMPLATES</code>設定の<code>DIRS</code>オプションに指定されたディレクトリ</span></strong>が検索対象となります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>つまり、<code>extends</code>で指定するテンプレートファイルは同じフォルダに存在する必要はありません。</p>
</div></div>



<p>通常、Djangoプロジェクトはプロジェクト全体のテンプレートを配置するための<code>templates</code>ディレクトリを持ち、各アプリケーションディレクトリの下にも各々<code>templates</code>ディレクトリを持つ構造になっています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">myproject/
├── manage.py
├── myproject/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
├── templates/
│   ├── base.html
└── todo/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations/
    ├── models.py
    ├── templates/
    │   ├── todo/
    │   │   ├── index.html
    │   │   ├── task_form.html
    │   │   └── delete_confirm.html
    ├── tests.py
    ├── urls.py
    └── views.py</pre>



<p>ここで、各アプリケーションディレクトリ（↑の例言えば「<code>todo</code>」）の下にある<code>templates</code>ディレクトリには、<strong>そのアプリケーション専用のテンプレートを配置</strong>。</p>



<p>プロジェクト全体で共有するテンプレート（↑の例で言えば「<code>base.html</code>」）はプロジェクトレベルの<code>templates</code>ディレクトリに配置します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><code>settings.py</code>の<code>TEMPLATES</code>設定では<code>DIRS</code>オプションにプロジェクトレベルの<code>templates</code>ディレクトリのパスを含めます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># settings.py
TEMPLATES = [
    {
        ...
        'DIRS': [BASE_DIR / 'templates'],  # BASE_DIRはプロジェクトのルートディレクトリを表す
        ...
    },
]</pre>



<p>このようにすることで、<code>base.html</code>のようなプロジェクト全体で共有するテンプレートを各アプリケーションから参照することが可能になります。</p>
</div></div>



<p>したがって、<code>todo</code>アプリケーションの<code>index.html</code>から<code>base.html</code>を継承するには、以下のように記述すればOKということ。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% extends 'base.html' %}
...</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><code>extends</code>タグで指定するテンプレートファイルの位置は、<code>TEMPLATES</code>設定の<code>DIRS</code>オプションで指定されたディレクトリの下であればどこでもかまいません。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc6">Django：extends/blockのまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><strong>テンプレートの継承とは</strong></p>



<ol class="wp-block-list">
<li>テンプレートの継承とは、１つのテンプレート（ベーステンプレート）の構造を他のテンプレート（子テンプレート）が継承することを指す。
<ul class="wp-block-list">
<li>HTMLやテンプレートコードの重複を避け、テンプレートの再利用性と保守性を向上させるための重要な手法。</li>
</ul>
</li>



<li>Djangoでは<code>{% extends %}</code>タグを使用してテンプレートの継承を行う。</li>



<li>ベーステンプレート内で、<code>{% block %}</code>タグを用いて子テンプレートでオーバーライドできるセクションを定義する。</li>
</ol>



<p class="has-text-align-center"><strong>ベーステンプレート</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html>
&lt;head>
    &lt;title>{% block title %}デフォルトタイトル{% endblock %}&lt;/title>
&lt;/head>
&lt;body>
    {% block content %}
    &lt;!-- この部分は子テンプレートでオーバーライド予定 -->
    {% endblock %}
&lt;/body>
&lt;/html></pre>



<p class="has-text-align-center"><strong>子テンプレート</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{% extends "base.html" %}

{% block title %}
ページタイトル
{% endblock %}

{% block content %}
&lt;h1>ページタイトル&lt;/h1>
&lt;p>ここは、ページのコンテンツです。&lt;/p>
{% endblock %}</pre>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>初めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【簡単５ステップ】DjangoでMySQLを利用する方法を３分で解説</title>
		<link>https://it-biz.online/python/django-mysql/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Fri, 30 Jun 2023 07:52:34 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8000</guid>

					<description><![CDATA[DjangoでMySQLを利用するためのステップバイステップの手順を解説します。 DjangoはデフォルトのDBMSとしてSQLiteが設定されていますが、大規模なデータを扱うようなアプリケーションや、複数のプロセスから [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://it-biz.online/python/django/">Django</a>で<strong>MySQL</strong>を利用するためのステップバイステップの手順を解説します。</p>



<p>Djangoはデフォルトの<a href="https://it-biz.online/it-skills/dbms/">DBMS</a>として<strong>SQLite</strong>が設定されていますが、大規模なデータを扱うようなアプリケーションや、複数のプロセスから同時にアクセスするような状況では、パフォーマンスやデータ整合性の問題が生じる可能性があります。</p>



<p>一方、MySQLは大量のデータを扱うことができ、複数のユーザーからの同時アクセスに対応することができ、トランザクションをサポートしているため、データの整合性を保つことが可能。そのため、Djangoの開発では、SQLiteをそのまま利用するのではなくMySQLなどのデータベースを利用するのが一般的。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/db-transaction/">トランザクションとは？</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このページでは、以上のような背景を踏まえ、DjangoでMySQLを利用する方法を５つのステップに分けてわかりやすく解説します。</p>
</div></div>



<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title">DjangoでMySQLを利用する方法</div>
<ul class="wp-block-list">
<li><span class="badge-blue">ステップ1</span>　MySQLのインストール</li>



<li><span class="badge-blue">ステップ2</span>　MySQLデータベースの作成</li>



<li><span class="badge-blue">ステップ3</span>　MySQLユーザーの作成と権限の付与</li>



<li><span class="badge-blue">ステップ4</span>　DjangoでMySQLを使うための設定</li>



<li><span class="badge-blue">ステップ5</span>　データベースのマイグレーション</li>
</ul>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この解説は、既にVPS（CentOS）上にDjangoがインストールされている状況を想定しています。１から自分だけでDjango開発を行ってPythonの勉強をしたい方は以下の記事をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/it-skills/vps-python/" title="【簡単９ステップ】VPS上にPythonの実行環境を構築する方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/04/vps-python-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/04/vps-python-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/04/vps-python-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/04/vps-python-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【簡単９ステップ】VPS上にPythonの実行環境を構築する方法</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、VPS上にPythonの実行環境を構築する手順をわずか5分で学べます。シンプルかつ詳細なガイドラインに従って、プログラミングスキルを新たなレベルに引き上げましょう。初心者でも安心のステップバイステップの方法を提供します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.06.30</div></div></div></div></a>
</div></figure>
</div></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ステップ１：MySQLのインストール</a></li><li><a href="#toc2" tabindex="0">ステップ２：MySQLデータベースの作成</a></li><li><a href="#toc3" tabindex="0">ステップ３：MySQLユーザーの作成と権限の付与</a></li><li><a href="#toc4" tabindex="0">ステップ４：DjangoでMySQLを使うための設定</a></li><li><a href="#toc5" tabindex="0">ステップ５：データベースのマイグレーション</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ステップ１：MySQLのインストール</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>それでは早速DjangoでMySQLを利用する方法を解説していきます。</p>
</div></div>



<p>まずはMySQLサーバをインストールします。以下のコマンドを実行。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo yum install mysql-server</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このコマンドを実行すると、以下のような結果が返って来ますので「y」を入力。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ダウンロードサイズの合計: 21 M
インストール後のサイズ: 179 M
これでよろしいですか? [y/N]: </pre>
</div></div>



<p>次に、MySQLサーバを起動します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo systemctl start mysqld</pre>



<p>MySQLが正常に起動したか確認するには、以下のコマンドを実行します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo systemctl status mysqld</pre>



<p>以下のような結果が返ってくればOK。正常に起動していることが確認できます。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="585" height="201" src="https://it-biz.online/wp-content/uploads/2023/06/image-53.png" alt="MySQL active" class="wp-image-8004" srcset="https://it-biz.online/wp-content/uploads/2023/06/image-53.png 585w, https://it-biz.online/wp-content/uploads/2023/06/image-53-300x103.png 300w, https://it-biz.online/wp-content/uploads/2023/06/image-53-500x172.png 500w" sizes="(max-width: 585px) 100vw, 585px" /><figcaption class="wp-element-caption">図1:MySQL active</figcaption></figure>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">● mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; preset: disabled)
     Active: active (running) since Fri 2023-06-30 15:15:27 JST; 18s ago
    Process: 357658 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
    Process: 357680 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
   Main PID: 357756 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 11106)
     Memory: 449.0M
        CPU: 3.592s
     CGroup: /system.slice/mysqld.service
             mq357756 /usr/libexec/mysqld --basedir=/usr</pre>



<h2 class="wp-block-heading"><span id="toc2">ステップ２：MySQLデータベースの作成</span></h2>



<p>次に、<strong>Djangoで使用するためのデータベースを作成</strong>します。まず、MySQLのシェルにログインします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">mysql -u root -p</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>パスワードの入力が求められますが、今はまだパスワードを設定していないのでそのままEnterボタンを押下。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># mysql -u root -p
Enter password:
→このままEnterボタンを実行でログインできます。</pre>
</div></div>



<p>ログインが完了すると以下のような結果が返って来ます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 Source distribution

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ログインしたら<strong>以下のコマンドを実行してデータベースを作成</strong>します。<code>your_database_name</code>は、作成したいデータベース名に置き換えてください。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">CREATE DATABASE your_database_name CHARACTER SET UTF8;

---結果---
mysql> CREATE DATABASE your_database_name CHARACTER SET UTF8;
Query OK, 1 row affected, 1 warning (0.02 sec)</pre>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-exclamation-circle"><span class="tab-caption-box-label-text block-box-label-text box-label-text">ユーザのパスワード設定方法</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>MySQLユーザのパスワードの設定方法は以下のような流れで行われます。</p>
</div></div>



<p>まずは、以下のコマンドを実行してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo mysql_secure_installation</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このコマンドを実行すると、セキュリティ設定を行うための対話型のスクリプトが起動します。スクリプトは以下の手順で進行します。</p>
</div></div>



<ol class="wp-block-list">
<li>パスワードの設定をするかどうかを尋ねられます。"Y"を入力してEnterキーを押します。</li>



<li>新しいパスワードを入力してください。適切なパスワードを入力し、Enterキーを押します。</li>



<li>パスワードの強度を確認するために再度パスワードを入力します。同じパスワードを再入力し、Enterキーを押します。</li>



<li>パスワードが正しく設定されたか確認されます。</li>



<li>f匿名ユーザの削除、rootユーザのリモートログインの禁止、テストデータベースの削除を選択します。詳細は環境に合わせて選択してください。</li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の手順を実行すると、MySQLのパスワードが設定されます。再度ログインする際には、設定したパスワードを使用してログインしてください。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : n

 ... skipping.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
All done!</pre>
</div></div>



<h2 class="wp-block-heading"><span id="toc3">ステップ３：MySQLユーザーの作成と権限の付与</span></h2>



<p>MySQLへのログインが成功したら、Djangoからデータベースにアクセスするためのユーザーを作成し、権限を付与します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下のコマンドを実行してください。<code>your_username</code>と<code>your_password</code>は、作成したいユーザー名とパスワードに置き換えてください。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password';

-----
Query OK, 0 rows affected (0.01 sec)</pre>



<p>作成したユーザーに対して、先ほど作成したデータベースへの全権限を付与します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_username'@'localhost';

-----
Query OK, 0 rows affected (0.01 sec)</pre>



<p>変更を有効にするために、最後に以下のコマンドを実行します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">FLUSH PRIVILEGES;</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これでMySQLの設定は完了です。MySQLのシェルを終了します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">exit;</pre>
</div></div>



<h2 class="wp-block-heading"><span id="toc4">ステップ４：DjangoでMySQLを使うための設定</span></h2>



<p>Django側でMySQLを使えるように設定します。まず、DjangoがMySQLを使うために必要なパッケージをインストールします。以下のコマンドを実行してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pip install mysqlclient</pre>



<p>次に、Djangoの設定ファイルである<code>settings.py</code>を開き、データベースの設定を以下のように変更します。適切なデータベース名、ユーザー名、パスワードに置き換えてください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_username',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以上で、DjangoとMySQLの設定は完了です。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc5">ステップ５：データベースのマイグレーション</span></h2>



<p>最後に、Djangoのマイグレーションを実行して、データベースのセットアップを完了します。以下のコマンドを実行してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python manage.py migrate</pre>



<p>このコマンドにより、DjangoのデータベーススキーマがMySQLに適用されます。</p>



<p>以上で、DjangoでMySQLを利用する設定が完了しました。これにより、Djangoで作成したWebアプリケーションでMySQLデータベースを利用することができます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Django】モデル（models.py）：初心者向けに３ステップで解説</title>
		<link>https://it-biz.online/python/models/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Mon, 03 Jul 2023 12:15:01 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8006</guid>

					<description><![CDATA[Web開発の世界では、データの管理と操作が非常に重要な役割を果たします。PythonのWebフレームワークであるDjangoは、このデータ管理を効率的に行うための強力なツールをモデル（models.py）として提供してい [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Web開発の世界では、データの管理と操作が非常に重要な役割を果たします。<a href="https://it-biz.online/python/python-abc/">Python</a>のWebフレームワークであるDjangoは、このデータ管理を効率的に行うための強力なツールを<strong>モデル</strong>（<strong>models.py</strong>）として提供しています。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/django/">Djangoとは？</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoのモデルは、<a href="https://it-biz.online/it-skills/database/">データベース</a>の構造を定義するためのPythonのクラスで、テーブルのカラムやリレーションを定義します。これにより、データベースとのやり取りが容易になり、データの整合性を保つことが可能となります。</p>
</div></div>



<p>このページでは、Djangoのモデルについて、その基本的な概念から具体的な使用方法まで、初心者向けにわかりやすく解説します。5つのステップを通じて、Djangoのモデルを理解し、効果的に使用する方法を学んでいきましょう。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li><strong>Djangoモデルの基本</strong></li>



<li>Djangoモデルの作成方法</li>



<li>Djangoの主キーモデル</li>
</ul>
</div>
</div></div>



<p>Pythonエンジニア/Djangoを利用したWeb開発者を目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>。是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ステップ1：Djangoモデル（models.py）の基本</a><ol><li><a href="#toc2" tabindex="0">モデルの定義（models.py の定義）</a></li><li><a href="#toc3" tabindex="0">フィールド（項目）の種類</a></li><li><a href="#toc4" tabindex="0">モデルのマイグレーション</a></li></ol></li><li><a href="#toc5" tabindex="0">ステップ2：Djangoモデルの作成方法</a></li><li><a href="#toc6" tabindex="0">ステップ3：Djangoモデルの操作方法</a><ol><li><a href="#toc7" tabindex="0">データの作成</a></li><li><a href="#toc8" tabindex="0">データの取得</a></li><li><a href="#toc9" tabindex="0">データの更新</a></li><li><a href="#toc10" tabindex="0">データの削除</a></li></ol></li><li><a href="#toc11" tabindex="0">Djangoモデル（models.py）のまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ステップ1：Djangoモデル（models.py）の基本</span></h2>



<p>Djangoのモデル（models.py）は、アプリケーションのデータを構造化し、Pythonのクラスとして定義します。これにより、データベースとのやり取りが容易になり、データの整合性を保つことが可能になります。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/class-2/">Pythonのクラスの基本</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><strong>と説明されても、なかなかピンと来ない</strong>方も多いはずなので、この章では実際のサンプルコードを見つつ、Djangoモデルの基本的な要素とその役割について深めていきましょう。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">モデルの定義（models.py の定義）</span></h3>



<p>Djangoモデルは、Pythonのクラスとして定義。このクラスは<code><strong>django.db.models.Model</strong></code>を継承します。モデルクラスの各フィールドは、モデルフィールドクラスのインスタンスとして定義され、これがデータベースの<strong><span class="marker-under">各項目</span></strong>を表します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、ブログ投稿を表すモデルを作成する場合、以下のように定義することができます。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文</a></p>



<p>モデルクラスの名前は、通常<strong>表現したいオブジェクトを表す名詞の単数形</strong>を使用。例えば、ブログ投稿を表すモデルを作成する場合、<code>BlogPost</code>という名前を使用します。</p>



<p>モデルクラス内のフィールドは、データベースの各列（カラム）を表します。フィールドの名前はPythonの変数として有効なものであれば何でも構いません。フィールドの型は、そのフィールドがどのようなデータを保存するかをDjangoに伝えます。</p>



<h3 class="wp-block-heading"><span id="toc3">フィールド（項目）の種類</span></h3>



<p>Djangoは多くの種類のフィールドを提供しています。これにより、様々な種類のデータをデータベースに保存することができます。以下に、いくつかの主要なフィールドを示します。</p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>フィールドタイプ</th><th>用途</th></tr></thead><tbody><tr><td><strong>CharField</strong></td><td>短い文字列<br>max_length（最大長を指定する必要があります）</td></tr><tr><td><strong>TextField</strong></td><td>長い文字列</td></tr><tr><td><strong>DateTimeField</strong></td><td>日付と時間</td></tr><tr><td><strong>IntegerField</strong></td><td>整数</td></tr><tr><td><strong>BooleanField</strong></td><td>真偽値（True/False）</td></tr><tr><td><strong>FloatField</strong></td><td>浮動小数点数</td></tr><tr><td><strong>EmailField</strong></td><td>メールアドレス</td></tr></tbody></table></div></figure>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/data_type/">プログラミング言語におけるデータ型</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これらは一部の例であり、Djangoはこれら以外にも多くのフィールドタイプを提供しています。例えば、<code>ImageField</code>や<code>FileField</code>はファイルのアップロードを扱い、<code>ForeignKey</code>や<code>ManyToManyField</code>はモデル間のリレーションシップを表現します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc4">モデルのマイグレーション</span></h3>



<p>モデルを定義したら、それを<strong><span class="marker-under">データベースに反映する必要</span></strong>があります。これを行うために、Djangoはマイグレーションという機能を提供しています。マイグレーションは、モデルの変更をデータベーススキーマに適用する方法です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>マイグレーションを作成するには、以下のコマンドを実行します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python manage.py makemigrations

# Migrations for 'todo':
#   todo/migrations/0003_blogpost.py
#     - Create model BlogPost</pre>



<p>このコマンドを実行すると、Djangoはモデルの変更を追跡し、<strong>それらの変更をマイグレーションファイルに記録</strong>します。次に、以下のコマンドを実行して、これらのマイグレーションをデータベースに適用するという流れ。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python manage.py migrate

# Operations to perform:
#   Apply all migrations: admin, auth, contenttypes, sessions, todo
# Running migrations:
#   Applying todo.0003_blogpost... OK</pre>



<p>これにより、モデルの変更がデータベーススキーマに反映されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、利用している<a href="https://it-biz.online/it-skills/dbms/">DBMS</a>がMySQLの場合、スキーマ反映後は以下のようにきちんとテーブルが作成されていることが分かります。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">mysql> desc todo_blogpost;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | bigint       | NO   | PRI | NULL    | auto_increment |
| title    | varchar(200) | NO   |     | NULL    |                |
| content  | longtext     | NO   |     | NULL    |                |
| pub_date | datetime(6)  | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+</pre>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/django-mysql/" title="【簡単５ステップ】DjangoでMySQLを利用する方法を３分で解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/06/Django-MySQL-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/06/Django-MySQL-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/06/Django-MySQL-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/06/Django-MySQL-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【簡単５ステップ】DjangoでMySQLを利用する方法を３分で解説</div><div class="blogcard-snippet internal-blogcard-snippet">DjangoでMySQLを利用するための設定方法を５つのステップに分けて解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.08.01</div></div></div></div></a>
</div></figure>



<p>以上が、Djangoモデルの基本的な概念とその使用方法です。次のステップでは、具体的なモデルの作成方法について詳しく見ていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc5">ステップ2：Djangoモデルの作成方法</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>前章ではDjangoモデルの基本的な概念を学びました。今回はその知識を活かし、具体的なモデルの作成方法について見ていきましょう。</p>
</div></div>



<p>Djangoモデルを作成するためには、まず新しいアプリケーションを作成。以下のコマンドを実行して新しいアプリケーションを作成します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python manage.py startapp your_app_name</pre>



<p>このコマンドを実行すると、<strong>新しいアプリケーションディレクトリが作成</strong>され、その中には<code>models.py</code>というファイルが作成されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この<strong><code>models.py</code>ファイルが、モデルを定義する場所</strong>です。</p>
</div></div>



<p>ブログ投稿を表すモデルを作成する場合、この<code>models.py</code>にモデルを編集することで先ほどのようなテーブルを作成することができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>あとは、マイグレーション。マイグレーションを実行する際には、特定のアプリケーションを指定することもできます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python manage.py makemigrations your_app_name</pre>



<p>このコマンドを実行すると、Djangoは<code>your_app_name</code>アプリケーションのモデルの変更を追跡し、それらの変更をマイグレーションファイルに記録します。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc6">ステップ3：Djangoモデルの操作方法</span></h2>



<p>ここまでで、モデル（models.py）を作成し、データベースに反映する方法を学びました。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次はモデルを使ってデータベースの操作を行う方法について解説します。具体的には、データの作成、取得、更新、削除（CRUD操作）について説明します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc7">データの作成</span></h3>



<p>Djangoモデルを使って新しいデータを作成するには、モデルクラスのインスタンスを作成し、それを保存。以下に、<code>BlogPost</code>モデルを使って新しいブログ投稿を作成する例を示します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.utils import timezone
from .models import BlogPost

post = BlogPost(title='My first post', content='This is my first post.', pub_date=timezone.now())
post.save()</pre>



<p>この例では、まず<code>BlogPost</code>クラスのインスタンス<code>post</code>を作成しています。<code>BlogPost</code>の括弧内には、各フィールドの初期値を指定。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここでは、<code>title</code>には<code>'My first post'</code>、<code>content</code>には<code>'This is my first post.'</code>、<code>pub_date</code>には現在の日時（<code>timezone.now()</code>）を設定しています。</p>
</div></div>



<p>最後に、<strong><code>save()</code>メソッド</strong>を呼び出すことで、このインスタンスをデータベースに保存しています。この操作により、新しいブログ投稿がデータベースに作成されるという仕組みです。</p>



<h3 class="wp-block-heading"><span id="toc8">データの取得</span></h3>



<p>データベースからデータを取得するには、モデルクラスの<code>objects</code>属性を使用します。<code>objects</code>属性は、モデルクラスに対するデータベースクエリを表すマネージャオブジェクトです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下に、すべてのブログ投稿を取得する例を示します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">posts = BlogPost.objects.all()</pre>



<p>この例では、<code>BlogPost.objects.all()</code>がすべての<code>BlogPost</code>オブジェクトを返します。この結果はPythonのリスト。つまり、forループを使って各ブログ投稿を順に処理することができる仕組みです。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/python-list/">リストとは？</a> / <a href="https://it-biz.online/python/for-range/">forループとは？</a></p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">条件を指定してデータを取得する</span></div><div class="tab-caption-box-content block-box-content box-content">
<p>モデルクラスの<code>objects</code>属性には、条件を指定してデータを取得するためのメソッドが用意されています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、<code>filter()</code>メソッドを使用すると、指定した条件に一致するすべてのオブジェクトを取得することができます。以下に、タイトルが<code>'My first post'</code>であるすべてのブログ投稿を取得する例を示します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">posts = BlogPost.objects.filter(title='My first post')</pre>



<p>この例では、<code>filter(title='My first post')</code>がタイトルが<code>'My first post'</code>であるすべての<code>BlogPost</code>オブジェクトを返します。この結果はPythonのリストと同様に扱うことができます。</p>



<p>また、<code>get()</code>メソッドを使用すると、指定した条件に一致する一つのオブジェクトを取得することができます。ただし、<code>get()</code>メソッドは一致するオブジェクトが一つだけであることを期待しています。一致するオブジェクトがない場合や、複数存在する場合にはエラーが発生します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以上のように、Djangoではデータを取得する際に様々な条件を指定することが可能です。これにより、必要なデータだけを効率的に取得することができます。</p>
</div></div>
</div></div>



<h3 class="wp-block-heading"><span id="toc9">データの更新</span></h3>



<p>データを更新するには、<strong>①データを取得</strong>し、<strong>②その属性を変更</strong>し、③再度保存します。以下に、最初のブログ投稿のタイトルを更新する例を示します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">post = BlogPost.objects.get(pk=1)
post.title = 'Updated title'
post.save()</pre>



<p>この例では、まず<strong><code>get()</code>メソッド</strong>を使用して最初のブログ投稿を取得しています。<code>get()</code>メソッドは、指定した条件に一致するオブジェクトをデータベースから取得します。ここでは、主キー（<code>pk</code>）が1のブログ投稿を取得しています。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/primary-key/">主キー（primary key）とは？</a></p>



<p>次に、取得したブログ投稿の<code>title</code>属性を更新し、<code>save()</code>メソッドを呼び出して変更をデータベースに保存しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この操作により、ブログ投稿のタイトルが更新されます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc10">データの削除</span></h3>



<p>データを削除するには、<strong>削除したいオブジェクトを取得し、その<code>delete()</code>メソッドを呼び出します。</strong>以下に、最初のブログ投稿を削除する例を示します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">post = BlogPost.objects.get(pk=1)
post.delete()</pre>



<p>この例では、まず<code>get()</code>メソッドを使用して最初のブログ投稿を取得。次に、<code>delete()</code>メソッドを呼び出してこのブログ投稿をデータベースから削除しています。この操作により、指定したブログ投稿がデータベースから削除されるという流れです。</p>



<p>以上が、Djangoモデルを使ったデータベースの基本的な操作方法です。これらの操作を理解し、適切に使い分けることで、Pythonコードからデータベースを効率的に操作することができるようになります。</p>



<h2 class="wp-block-heading"><span id="toc11">Djangoモデル（models.py）のまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<ol class="wp-block-list">
<li><strong>Djangoモデルとは</strong>
<ul class="wp-block-list">
<li>Djangoモデルは、データベースのテーブルをPythonのクラスとして表現したものです。</li>



<li>モデルはデータの構造（フィールド）とそのデータに対する操作（メソッド）を定義します。</li>
</ul>
</li>



<li><strong>モデルの定義</strong>
<ul class="wp-block-list">
<li>モデルは<code>models.py</code>ファイル内に定義します。</li>



<li>モデルクラスは<code>django.db.models.Model</code>を継承します。</li>



<li>モデルのフィールドはクラス変数として定義します。</li>
</ul>
</li>



<li><strong>フィールドの種類</strong>
<ul class="wp-block-list">
<li>Djangoは様々な種類のフィールドを提供しています（例：<code>CharField</code>, <code>TextField</code>, <code>DateTimeField</code>など）。</li>



<li>各フィールドは特定のデータ型を表し、データベースの列（カラム）を定義します。</li>
</ul>
</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')</pre>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>始めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Django】プロジェクトの作成と基本構造を初心者向けに１から解説</title>
		<link>https://it-biz.online/python/project/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Wed, 12 Jul 2023 11:48:48 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8183</guid>

					<description><![CDATA[プロジェクトは、全てのアプリケーション、データベース設定、サードパーティライブラリ、静的ファイルなど、Webサイトやアプリケーションを構成する全ての要素を含む箱のようなもの。 Djangoのプロジェクト構造は、非常に組織 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Web開発において、１つのWebサイトやアプリケーション全体を指し示す用語として「プロジェクト」という言葉が使用されます。</p>
</div></div>



<p>プロジェクトは、全てのアプリケーション、データベース設定、サードパーティライブラリ、静的ファイルなど、<strong><span class="marker-under">Webサイトやアプリケーションを構成する全ての要素を含む箱のようなもの。</span></strong></p>



<p><a href="https://it-biz.online/python/django/">Django</a>のプロジェクト構造は、非常に組織化されていて、特定の規則によって構成されています。これにより、異なる開発者やチーム間で効率的なコーディングが可能になります。</p>



<p>しかし、最初に見たとき、その構造は少々複雑に見えるかもしれません。それぞれのコンポーネントが何をするのか、どうやって連携するのかを理解することは、Djangoで効率的に開発を行うためには不可欠。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このページでは、Djangoプロジェクトの各コンポーネントとその機能を一つ一つ解説し、どのように相互に関連し合っているかを説明します。初めてDjangoプロジェクトに取り組む方や、既に始めてみて「このファイルは何をするの？」と思っている方向けにわかりやすくご説明します。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>Djangoのプロジェクトとは？</li>



<li>Djangoのプロジェクトの作成方法</li>



<li>Djangoプロジェクトの構成</li>
</ul>
</div>
</div></div>



<p>Djangoを用いたWeb開発を行いたい人であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span>です。</strong>是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Djangoプロジェクトの作成</a><ol><li><a href="#toc2" tabindex="0">settings.py</a></li><li><a href="#toc3" tabindex="0">urls.py</a></li></ol></li><li><a href="#toc4" tabindex="0">Djangoアプリケーション</a><ol><li><a href="#toc5" tabindex="0">Djangoアプリケーションの作成</a></li><li><a href="#toc6" tabindex="0">プロジェクトとアプリケーションの統合</a></li></ol></li><li><a href="#toc7" tabindex="0">Django：プロジェクトのまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Djangoプロジェクトの作成</span></h2>



<p>はじめに、<strong>Djangoプロジェクトの作成方法</strong>を解説します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoプロジェクトの作成は驚くほど簡単です。適切なディレクトリに移動したら、次のコマンドを実行するだけ。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">django-admin startproject myproject</pre>



<p>これで「myproject」という名前の新しいDjangoプロジェクトが作成されます。プロジェクトの名前は任意なので、目的とするWebサイトやWebアプリ用のプロジェクトであることがわかるようにしましょう。</p>



<p>上記のプロジェクト作成を行うと、以下のようなディレクトリが構築されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この最初に作成されるファイルとディレクトリが、Djangoプロジェクトの基本構造です。ここでは、それぞれのファイルとディレクトリが何を表しているのかは↓の通り。</p>
</div></div>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>ファイル/ディレクトリ</th><th>説明</th></tr></thead><tbody><tr><td><code>manage.py</code></td><td>Djangoの道具箱です。<a href="https://it-biz.online/it-skills/server-abc/">サーバー</a>を立ち上げたり、<a href="https://it-biz.online/it-skills/database/">データベース</a>の操作を行ったりするのに使います。</td></tr><tr><td><code>myproject/__init__.py</code></td><td>このファイルがあることでPythonは<code>myproject</code>を<a href="https://it-biz.online/python/import/">パッケージ</a>（関連するPythonファイルのまとまり）と認識します。普通は何も書かなくてOK。</td></tr><tr><td><code>myproject/<strong>settings.py</strong></code></td><td>プロジェクト全体の設定が書かれています。例えば、使うデータベースの種類や、アプリケーションのリストなどです。</td></tr><tr><td><code>myproject/<strong>urls.py</strong></code></td><td>ここでは、ユーザーがアクセスするURLとそれに対応するコード（ビュー）を結びつけます。目次のようなものです。</td></tr><tr><td><code>myproject/asgi.py</code> and <code>myproject/wsgi.py</code></td><td>これらのファイルは、<a href="https://it-biz.online/it-skills/web-server/">Webサーバー</a>とDjangoの間の通信を助けます。基本的には何も触らなくても大丈夫です。</td></tr></tbody></table></div></figure>



<p>ここでは、特に大事な「<code><strong>settings.py</strong></code>」「<code><strong>urls.py</strong></code>」について詳しくご説明します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これを理解することで、Djangoの「プロジェクト」の概念やイメージがより深まるはずです。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">settings.py</span></h3>



<p>Djangoプロジェクトの心臓部とも言えるのが<code>settings.py</code>ファイルです。ここにはプロジェクト全体に関わる様々な設定が記述されています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># settings.py

DEBUG = True  # デバッグモードを有効にします。

INSTALLED_APPS = [  # 使用するアプリケーションのリスト
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 自作のアプリケーションもここで指定します。
]

MIDDLEWARE = [  # ミドルウェアのリスト
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'myproject.urls'  # ルートURL設定ファイルの指定

TEMPLATES = [  # テンプレートエンジンの設定
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
    },
]

DATABASES = {  # データベースの設定
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

STATIC_URL = '/static/'  # 静的ファイルへのURLのプレフィックス
STATIC_ROOT = os.path.join(BASE_DIR, 'static')  # 静的ファイルが集められる場所</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文</a> / <a href="https://it-biz.online/python/python-list/">Pythonのリスト</a></p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>設定</th><th>説明</th></tr></thead><tbody><tr><td><code>DEBUG</code></td><td>エラーが起きたときに詳細なエラー情報を表示するかどうかの設定。</td></tr><tr><td><code>INSTALLED_APPS</code></td><td>Djangoプロジェクトで使用するアプリケーションのリスト。自分で作成したアプリケーションやDjangoが用意しているアプリケーションなどをここで指定する。</td></tr><tr><td><code>MIDDLEWARE</code></td><td>リクエストとレスポンスを処理する際に、特定の処理を挟むためのミドルウェアのリスト。セキュリティ関連の処理やセッション管理などに使われる。</td></tr><tr><td><code>ROOT_URLCONF</code></td><td>プロジェクトのルートURL設定を行うファイルを指定。通常は<code>&lt;プロジェクト名&gt;.urls</code>が指定される。</td></tr><tr><td><code>TEMPLATES</code></td><td>テンプレートエンジンの設定。DjangoではデフォルトでDjangoテンプレートエンジンが使われるが、必要に応じて他のエンジンを使用することも可能。</td></tr><tr><td><code>DATABASES</code></td><td>使用するデータベースの設定。DjangoはデフォルトでSQLiteを使用するが、PostgreSQLやMySQLなど他のデータベースを使用することも可能。（<span class="badge-green">関連</span>　<a href="https://it-biz.online/python/django-mysql/">MySQLをDBとして利用する方法</a>）</td></tr><tr><td><code>STATIC_URL</code> and <code>STATIC_ROOT</code></td><td>静的ファイル（CSSやJavaScriptなど）の設定。<code>STATIC_URL</code>は静的ファイルへのURLのプレフィックスを、<code>STATIC_ROOT</code>はcollectstaticコマンドで静的ファイルが集められる場所を指定。</td></tr></tbody></table></div></figure>



<p>このように、<code>settings.py</code>ファイルには様々な設定項目が存在し、それぞれの設定がDjangoプロジェクトの挙動を決定します。</p>



<h3 class="wp-block-heading"><span id="toc3">urls.py</span></h3>



<p>Djangoでは、ユーザーが指定したURLをクリックした際にどの画面に遷移させるか？（※どのビューを呼び出すか？）を設定します。その設定を行うのがurls.pyです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これをURLルーティングとも呼びます。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># urls.py

from django.urls import path
from . import views  # このプロジェクトのビューをインポート

urlpatterns = [
    path('', views.home, name='home'),  # ホームページ
    path('about/', views.about, name='about'),  # "about" ページ
    path('contact/', views.contact, name='contact'),  # "contact" ページ
]</pre>



<p>このコードの<code>urlpatterns</code>というリストには、それぞれのURLパターンとそれに対応するビューが設定されています。</p>



<p>たとえば、<code>path('about/', views.about, name='about')</code>という行では、ユーザーがWebサイトの"/about"というURLにアクセスしたときに<code>views.about</code>というビューを表示するよう指定しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>urls.py の基本や設定方法の詳細は以下の記事で解説しております。この機会に詳しく学習しておきたい方は以下をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/urls-py/" title="【Django】urls.py の仕組み・使い方のコツを３分で解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/07/urls-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/07/urls-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/07/urls-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/07/urls-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Django】urls.py の仕組み・使い方のコツを３分で解説</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】Djangoのurls.pyの基本的な概念・実践的な使い方を、シンプルで実用的なサンプルコードと共に分かりやすく解説します。DjangoのURLパターン、動的URLパターン、名前付きURLパターン、そしてURL名前空間の意味と役割を把握し、コーディングの効率を向上させましょう。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.07.12</div></div></div></div></a>
</div></figure>
</div></div>



<h2 class="wp-block-heading"><span id="toc4">Djangoアプリケーション</span></h2>



<p>Djangoプロジェクトは、その全体を構成する複数のアプリケーションから成り立っています。</p>



<p>アプリケーションとは、Webサイトの特定の機能（例えばToDo管理、ニュース配信、レポート機能）を実装するための部品のようなもの。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="905" height="320" src="https://it-biz.online/wp-content/uploads/2023/07/image-12.png" alt="" class="wp-image-8185" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-12.png 905w, https://it-biz.online/wp-content/uploads/2023/07/image-12-300x106.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-12-500x177.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-12-768x272.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-12-800x283.png 800w" sizes="(max-width: 905px) 100vw, 905px" /><figcaption class="wp-element-caption">図1：プロジェクトとアプリケーション</figcaption></figure>



<p>アプリケーションはそれぞれが特定の機能を提供し、複数のアプリケーションが組み合わさることで、大きなWebサイトを構成。これにより、Djangoは非常にスケーラブル（拡張可能）なフレームワークとなっています。</p>



<h3 class="wp-block-heading"><span id="toc5">Djangoアプリケーションの作成</span></h3>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoでは、新しいアプリケーションを作成するために<code>startapp</code>コマンドを使用します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$ python manage.py startapp myapp</pre>



<p>このコマンドを実行すると、<code>myapp</code>という名前の新しいDjangoアプリケーションが作成されます。そして、その中には以下のような一連のファイルが自動的に生成されます。</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>ファイル名</th><th>説明</th></tr></thead><tbody><tr><td><code><a href="https://it-biz.online/python/models/">models.py</a></code></td><td>データベースのスキーマ（テーブルとそのフィールド）を定義します。これらの定義はDjangoのORM（Object-Relational Mapping）によりPythonのクラスとして扱われます。</td></tr><tr><td><code><a href="https://it-biz.online/python/views/">views.py</a></code></td><td>ユーザーに表示するページ（ビュー）を制御するためのロジックを記述します。ビューはユーザーのリクエストに対するレスポンスを決定します。</td></tr><tr><td><code><a href="https://it-biz.online/python/urls-py/">urls.py</a></code></td><td>アプリケーションのURLルーティングを定義します。特定のURLパスがどのビューに対応するのかをマッピングします。</td></tr><tr><td><code>admin.py</code></td><td>Djangoの管理者ページでこのアプリケーションのモデルをどのように表示するかを定義します。</td></tr><tr><td><code>apps.py</code></td><td>アプリケーションの設定情報が格納されています。通常は自動生成され、特別な設定が必要ない限り変更する必要はありません。</td></tr><tr><td><code>tests.py</code></td><td>アプリケーションのテストコードを記述します。Djangoは組み込みのテストフレームワークを提供しているため、ここにテストを書くことで自動テストが可能です。</td></tr><tr><td><code>migrations/</code></td><td>データベースのスキーマの変更を追跡するためのディレクトリです。<code>models.py</code>の変更に応じてマイグレーションファイルが生成され、これによりデータベースのバージョン管理が可能になります。</td></tr></tbody></table></div></figure>



<p>これらの各ファイルはアプリケーションの特定の機能を担当し、それらがうまく連携することでアプリケーション全体が機能する仕組み。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>それぞれの詳細はリンクから内容を確認してください。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">プロジェクトとアプリケーションの統合</span></h3>



<p>新しいアプリケーションを作成したら、それをプロジェクトに統合する必要があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>具体的には、プロジェクトの<code>settings.py</code>ファイル内の<code>INSTALLED_APPS</code>設定に新しく作成したアプリケーションの名前を追加することで行います。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># settings.py

INSTALLED_APPS = [
    # ...
    'myapp',  # 新しく作成したアプリケーションを追加
]</pre>



<p>以上がDjangoのアプリケーションについての基本的な知識です。各アプリケーションが提供する機能を組み合わせることで、大きなDjangoプロジェクトを作り上げることが可能になります。</p>



<h2 class="wp-block-heading"><span id="toc7">Django：プロジェクトのまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p><span class="badge-blue">ポイント１</span>　Djangoプロジェクトとは、１つのWebアプリケーション全体を指す。</p>



<p><span class="badge-blue">ポイント２</span>　Djangoプロジェクトの主要なディレクトリ構造は以下のようになる。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">- manage.py
- プロジェクト名/
  - __init__.py
  - settings.py
  - urls.py
  - asgi.py or wsgi.py</pre>



<p><span class="badge-blue">ポイント３</span>　Djangoアプリケーションはプロジェクト内の個々の機能を表すモジュールで、以下のディレクトリ構造を持つ。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">- アプリケーション名/
  - __init__.py
  - models.py
  - views.py
  - urls.py
  - admin.py
  - apps.py
  - tests.py
  - migrations/</pre>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>初めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Django】urls.py の仕組み・使い方のコツを３分で解説</title>
		<link>https://it-biz.online/python/urls-py/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Thu, 06 Jul 2023 03:45:19 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8024</guid>

					<description><![CDATA[Djangoの中心的な要素であるurls.pyは、ユーザがアクセスしたURLを適切なビュー関数に接続する役割を担います。 参考　Django：ビュー関数（views.py）とは？ Pythonエンジニア/Djangoを利 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://it-biz.online/python/django/">Django</a>の中心的な要素である<code><strong>urls.py</strong></code>は、<strong><span class="marker-under">ユーザがアクセスしたURLを適切なビュー関数に接続する役割</span></strong>を担います。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="372" src="https://it-biz.online/wp-content/uploads/2023/07/image-3-1024x372.png" alt="Django urls.py" class="wp-image-8028" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-3-1024x372.png 1024w, https://it-biz.online/wp-content/uploads/2023/07/image-3-300x109.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-3-500x182.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-3-768x279.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-3-800x291.png 800w, https://it-biz.online/wp-content/uploads/2023/07/image-3.png 1064w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">図1：URLパターン</figcaption></figure>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/views/">Django：ビュー関数（views.py）とは？</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この記事では、<code>urls.py</code>の設定方法と、DjangoのURLルーティングがどのように動作するかを詳しく解説。Djangoアプリケーションを利用し、適切なURL設計を行うための知識を深めていきましょう。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>Django URLパターン: 基本概念
<ul class="wp-block-list">
<li><code>urls.py</code>とは何か？</li>



<li>URLパターンの基本的な書き方</li>
</ul>
</li>



<li>動的URLパターン</li>



<li>名前付きURLパターン</li>



<li>URL名前空間</li>



<li>最適なURL設計とベストプラクティス</li>
</ul>
</div>
</div></div>



<p>Pythonエンジニア/Djangoを利用したWeb開発者を目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>。是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Django：URLパターンの基本</a><ol><li><a href="#toc2" tabindex="0">Django urls.py とは</a></li><li><a href="#toc3" tabindex="0">path関数</a></li><li><a href="#toc4" tabindex="0">re_path関数</a></li></ol></li><li><a href="#toc5" tabindex="0">Django：動的URLパターン</a></li><li><a href="#toc6" tabindex="0">名前付きURLパターン</a><ol><li><a href="#toc7" tabindex="0">URL名前空間</a></li></ol></li><li><a href="#toc8" tabindex="0">Django urls.py のまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Django：URLパターンの基本</span></h2>



<p>DjangoにおけるURLパターンの設定は、<strong><span class="marker-under">Webアプリケーションがユーザーのリクエストにどのように応答するかを定義する重要な設定</span></strong>です。このセクションでは、<code>urls.py</code>ファイルの役割と、基本的なURLパターンの作り方を解説します。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-lightbulb"><span class="tab-caption-box-label-text block-box-label-text box-label-text">URLパターンとは？</span></div><div class="tab-caption-box-content block-box-content box-content">
<p><strong>URLパターン</strong>とは、Djangoがどの<a href="https://it-biz.online/python/views/">ビュー関数</a>を呼び出すかを判断するために使用するURLのルールまたはテンプレートのことを指します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>URLパターンは、Djangoの<code><strong><span class="marker-under">urls.py</span></strong></code>ファイル内で定義され、アプリケーションがブラウザからのリクエストをどのビューにルーティングするかを定義します。</p>
</div></div>



<p>例えば、あなたがブログ投稿アプリを開発しているとします。</p>



<p>ユーザーが個々のブログ記事を読むためには、それぞれの記事に対応するURLにアクセスする必要があります。URLパターンは、このとき、どのURLがどのビュー（つまり、どの記事）にマッチするかをDjangoに伝える役割を果たすようなイメージ。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="372" src="https://it-biz.online/wp-content/uploads/2023/07/image-3-1024x372.png" alt="Django urls.py" class="wp-image-8028" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-3-1024x372.png 1024w, https://it-biz.online/wp-content/uploads/2023/07/image-3-300x109.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-3-500x182.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-3-768x279.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-3-800x291.png 800w, https://it-biz.online/wp-content/uploads/2023/07/image-3.png 1064w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">図1：URLパターン</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の例で言うと、/AAA というURLをクリックされたら、View A を呼び出すような設定を行っているということ。</p>
</div></div>



<p>この章では上記URLパターンの定義（urls.py）の利用方法・基本を解説します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">Django urls.py とは</span></h3>



<p>Djangoにおける<code><strong>urls.py</strong></code>ファイルは、ユーザーのブラウザからのリクエスト（URL）を適切なビュー関数にルーティングするための"地図"の役割を果たします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>簡単に言うと、<code>urls.py</code>はDjangoがユーザーのリクエストをどのように処理すべきかを指示するためのファイルです。</p>
</div></div>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="508" src="https://it-biz.online/wp-content/uploads/2023/07/image-2-1024x508.png" alt="Django urls.py" class="wp-image-8027" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-2-1024x508.png 1024w, https://it-biz.online/wp-content/uploads/2023/07/image-2-300x149.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-2-500x248.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-2-768x381.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-2-800x397.png 800w, https://it-biz.online/wp-content/uploads/2023/07/image-2.png 1063w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">図2：Django urls.py</figcaption></figure>



<p><code>urls.py</code>ファイルはPythonのリスト　<code>urlpatterns</code>　を含んでいます。その中に<strong><code>path()</code>関数</strong>を使ったURLパターンが列挙されています。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/python-list/">Python：リストとは？</a> / <a href="https://it-biz.online/python/def/">関数とは？</a></p>



<p>以下が基本的な<code>urls.py</code>ファイルのサンプルコード。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
]</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記のコードでは、URLが<code>http://yourwebsite.com/</code>（空のパス）であった場合、<code>views.home</code>というビュー関数が呼び出されるように指示しています。</p>
</div></div>



<p>上記のコードを完全に理解するためには、path関数の使い方をマスターしている必要があります。ここで、path関数の使い方をご説明します。</p>



<h3 class="wp-block-heading"><span id="toc3">path関数</span></h3>



<p><code>path</code>関数の基本的な利用方法は以下の通り。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">path(route, view, kwargs=None, name=None)</pre>



<p class="has-text-align-center is-style-clip-box has-box-style"><strong>path関数の引数</strong></p>



<ul class="wp-block-list">
<li><code><span class="bold-blue">route</span></code>：URLパターンを表す文字列。このパターンがユーザーからのリクエストと一致した場合、指定されたビューが呼び出される。</li>



<li><code><span class="bold-blue">view</span></code>：上記の<code>route</code>がマッチしたときに呼び出されるビュー関数。ビュー関数はユーザーのリクエストを処理し、レスポンスを生成する。</li>



<li><code><span class="bold-blue">kwargs</span></code>：任意のキーワード引数をビューに<a href="https://it-biz.online/python/python-dictionary/">辞書</a>として渡す（必須ではありません）。</li>



<li><code><span class="bold-blue">name</span></code>：URLパターンに名前をつけるためのもので、テンプレート内などから参照できます（必須ではありません）。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記を踏まえて、再度サンプルコードを見てみましょう。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import path
from . import views

urlpatterns = [
    path('articles/', views.article_list, name='article_list'),
    path('articles/&lt;int:article_id>/', views.article_detail, name='article_detail'),
]</pre>



<p>↑のサンプルコードでは、２つの<code>path</code>関数が使われています。</p>



<p>1つ目の<code>path</code>関数は、<code>'articles/'</code>というURLパターンがマッチした場合に<code>views.article_list</code>というビュー関数を呼び出します。</p>



<p>2つ目の<code>path</code>関数は、<code>'articles/&lt;int:article_id&gt;/'</code>というURLパターンがマッチした場合に<code>views.article_detail</code>というビュー関数を呼び出します。このURLパターンは、特定の記事の詳細を表示するためのもので、<code>&lt;int:article_id&gt;</code>という部分は動的な部分（パスコンバータと呼ばれます）で、この部分には記事のIDが入ります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>動的URLについては後ほど詳しく解説します。ここでは、path関数の使い方とその役割が理解できればOK。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc4">re_path関数</span></h3>



<p><code>path()</code>関数は非常に直感的にURLパターンを記述することが可能です。しかし、複雑なURLパターンを記述する必要がある場合に備えて、Djangoはより強力なツール<code><strong>re_path()</strong></code>関数を提供しています。</p>



<p>この関数は<strong><span class="marker-under">Pythonの正規表現を用いてURLパターンを記述する</span></strong>ことを可能にします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><code>re_path()</code>関数の基本的な利用方法は以下の通り。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">re_path(route, view, kwargs=None, name=None)</pre>



<p>この<strong>引数は<code>path()</code>関数のものと同じ</strong>ですが、この際「<code>route</code>」は<strong><span class="marker-under">正規表現を使用した文字列</span></strong>となります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^articles/$', views.article_list, name='article_list'),
]</pre>



<p><code>re_path()</code>関数は、<code>'^articles/$'</code>というURLパターンがマッチした場合に<code>views.article_list</code>というビュー関数を呼び出します。ここで<code><span class="bold-blue">^</span></code>は文字列の先頭、<code><span class="bold-blue">$</span></code>は文字列の末尾を意味し、このパターンは<code>articles/</code>というURLにのみマッチします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>正規表現はうまく利用することで非常に便利なツールとなりますが、その分複雑で覚えることがたくさんあります。しかし、DjangoのURLディスパッチャで正規表現を理解しておくと、より複雑なURLマッチングを柔軟に行うことが可能になるので、この点も頭に入れておくと便利です。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc5">Django：動的URLパターン</span></h2>



<p>Djangoの強力な特性の1つ。それが、<strong>URLパターンを動的に生成できる</strong>ことです。これにより、一定のルールに基づいて可変的なURLを作成でき、各URLが特定のビューと一致するようにすることができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、ブログ記事の個々のページを表示するためのURLを生成する必要があるとします。記事が何千もある場合、それぞれの記事に対して固定のURLパターンを作成するのは非現実的です。ここで動的URLパターンの利点が生きてきます。</p>
</div></div>



<p>具体的には、<strong>URL内の特定の部分をプレースホルダとして扱い</strong>、それをビューに渡す引数として利用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">path('articles/&lt;int:article_id>/', views.article_detail, name='article_detail'),</pre>



<p>ここでは、<code><span class="bold-blue">&lt;int:article_id&gt;</span></code>　の部分が動的URLパターンに該当します。</p>



<p>このパターンは、"articles/"に続く<strong>整数</strong>を<code><strong>article_id</strong></code>として取り扱います。そしてこの<code>article_id</code>が<code>article_detail</code>ビューに引数として渡され、そのビュー関数内で特定の記事の詳細を取得するのに使用されるという仕組み。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このように動的URLパターンを使用することで、一つのURLパターンとビューが、任意の数の記事詳細ページを処理できるようになります。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-lightbulb"><span class="tab-caption-box-label-text block-box-label-text box-label-text">ビュー関数で動的URLパターンを受け取る方法</span></div><div class="tab-caption-box-content block-box-content box-content">
<p>先ほどのpath関数を、ビュー関数で受け取るには以下のように記述します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def article_detail(request, article_id):
    # ...</pre>



<p><code>article_detail</code>ビュー関数は2つの引数を受け取ります。１つ目の<code>request</code>はDjangoから自動的に渡されるHttpRequestオブジェクトで、２つ目の<span class="marker-under"><code>article_id</code>はURLから渡されるパラメータ</span>ーです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この<code>article_id</code>を使うことで、例えばデータベースから特定の記事を取得することができます。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.shortcuts import get_object_or_404
from .models import Article

def article_detail(request, article_id):
    article = get_object_or_404(Article, id=article_id)
    # ...

# ここではget_object_or_404関数を使用して
# IDに基づいてArticleオブジェクトを取得。</pre>
</div></div>



<h2 class="wp-block-heading"><span id="toc6">名前付きURLパターン</span></h2>



<p>Djangoのurls.pyでは、<strong>個々のURLパターンに名前をつけることができます</strong>。</p>



<p>名前をつけると、プロジェクト全体でそのURLを一意に参照することができ、テンプレートやビュー、あるいはリダイレクトの中でその名前を利用してURLを逆引きすることが可能になります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">path('articles/&lt;int:article_id>/', views.article_detail, name='article_detail'),</pre>



<p>この例では、<code>name='article_detail'</code>としてURLパターンに名前をつけています。これにより、他の場所から<code>'article_detail'</code>という名前でこのURLパターンを参照できます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>たとえば、ビュー内で<code>redirect</code>関数を使用してリダイレクトを行う場合、URLの名前を使用することができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.shortcuts import redirect

def create_article(request):
    # ...
    return redirect('article_detail', article_id=new_article.id)</pre>



<p>上記は、新規記事を作成した後その記事の詳細ページにリダイレクトさせるサンプルコードです。</p>



<p>ここでは、<code>redirect</code>関数にURLパターンの名前と、必要なパラメーター（この場合は<code>article_id</code>）を渡すことで、狙ったURLにリダイレクトさせています。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc7">URL名前空間</span></h3>



<p>大規模なDjangoプロジェクトでは、アプリケーションごとにURL設定を分けることが一般的。</p>



<p>このとき、<strong>異なるアプリケーション間でURLの名前が衝突しないようにするため</strong>に、URL名前空間を利用します。URL名前空間は、<strong><span class="marker-under">アプリケーションごとにURLの名前を分ける概念</span></strong>であり、それぞれのアプリケーションが独自の"スペース"を持つことを可能にします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>具体的にURL名前空間を利用するには、各アプリケーションの<code>urls.py</code>で<code>app_name</code>という変数を設定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">app_name = 'blog'
urlpatterns = [
    path('articles/&lt;int:article_id>/', views.article_detail, name='article_detail'),
    # ...
]</pre>
</div></div>



<p>ここでは、<code>app_name</code>に<code>'blog'</code>という名前を設定しました。これにより、この<code>urls.py</code>で定義されるURLパターンは全て<code>'blog'</code>という名前空間に所属します。</p>



<p>この<code>'blog'</code>という名前空間に属したURLの逆引きを行う際には、<code>'namespace:name'</code>という形式でURLの名前を指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">return redirect('blog:article_detail', article_id=new_article.id)</pre>



<p>この例では、<code>redirect</code>関数に<code>'blog:article_detail'</code>という名前を渡しています。この名前は、<code>'blog'</code>という名前空間の<code>'article_detail'</code>というURLを指しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このようにURL名前空間を使用することで、複数のアプリケーション間でURLの名前が衝突することなく、各アプリケーションが独立してURL設定を行うことができます。これにより、大規模なプロジェクトでもURLの管理が容易になります。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc8">Django urls.py のまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<ol class="wp-block-list">
<li><strong><span class="bold-blue">Django URLパターン</span></strong> Djangoでは、URLパターンを用いて特定のURLがどのビュー関数にマッピングされるかを定義。<code>path</code>関数を利用したシンプルな文字列マッチングか、<code>re_path</code>関数を利用した正規表現マッチングを利用可能。</li>



<li><strong><span class="bold-blue">動的URLパターン</span></strong> パスコンバータを用いてURLから特定のパラメータを抽出し、それをビュー関数に渡すことが可能。</li>



<li><strong><span class="bold-blue">名前付きURLパターン</span></strong> 各URLパターンに名前を付けることで、そのURLをプロジェクト全体で一意に参照することが可能。これにより、URLの変更があったときにも、その名前を使っているすべての場所で自動的に新しいURLに更新される。</li>



<li><strong><span class="bold-blue">URL名前空間</span></strong> 名前空間を設定することで、複数のアプリケーション間でURLの名前が衝突することを避け、各アプリケーションが独立してURL設定を行うことが可能。</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">## urls.py
from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
    path('articles/&lt;int:article_id>/', views.article_detail, name='article_detail'),
]

## views.py
from django.shortcuts import render, get_object_or_404
from .models import Article

def article_detail(request, article_id):
    article = get_object_or_404(Article, id=article_id)
    return render(request, 'blog/article_detail.html', {'article': article})</pre>



<p class="has-text-align-center"><span class="badge-green">関連</span>　<a href="https://it-biz.online/python/template/">Djangoテンプレート</a> / <a href="https://it-biz.online/python/render/">render関数</a></p>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>初めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Django】render関数の使い方をわかりやすく３分で解説</title>
		<link>https://it-biz.online/python/render/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Mon, 10 Jul 2023 11:30:08 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8152</guid>

					<description><![CDATA[Djangoのrender関数とは、HTTPリクエストを受け取り、指定されたテンプレートとデータを使用してHTML形式のHTTPレスポンスを生成する役割を担います。 参考　HTTPリクエスト/レスポンス このページではr [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://it-biz.online/python/django/">Django</a>の<code>render</code>関数とは、HTTPリクエストを受け取り、指定されたテンプレートとデータを使用してHTML形式のHTTPレスポンスを生成する役割を担います。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/http/">HTTPリクエスト/レスポンス</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>簡単に言えば、render関数はクライアントからのリクエストに対して<strong><span class="marker-under">動的にHTMLを生成</span></strong>し、それをレスポンスとして返すための関数。</p>
</div></div>



<p>このページではrender関数の使い方を初心者向けに１からわかりやすくサンプルコード付きでご説明します。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>render関数の使い方・構文ルール
<ul class="wp-block-list">
<li>Djangoのビュー（views.py）</li>



<li>Djangoのテンプレート</li>
</ul>
</li>



<li>render関数を利用する際の注意点</li>
</ul>
</div>
</div></div>



<p>Python/Djangoエンジニアを目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>です。是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Django：render関数とは？</a><ol><li><a href="#toc2" tabindex="0">render関数の構文ルール</a></li><li><a href="#toc3" tabindex="0">render関数の使い方とコツ</a></li></ol></li><li><a href="#toc4" tabindex="0">render関数を利用する際の注意点</a></li><li><a href="#toc5" tabindex="0">Django：render関数のまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Django：render関数とは？</span></h2>



<p>Djangoの<code>render</code>関数は、HTTPリクエストを処理して、<span class="marker-under">テンプレートを使ってHTTPレスポンスを作成するのに使用</span>されます。<code>render</code>関数はDjangoのテンプレートシステムと強力に統合されており、テンプレートを使ってHTMLを生成することができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>render関数を理解するためには、Djangoの「テンプレート」の基本知識を有している必要があります。テンプレートって何？という方は以下の記事をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/template/" title="【Django】テンプレートの仕組みと基本を３分で解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/07/template-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/07/template-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/07/template-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/07/template-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Django】テンプレートの仕組みと基本を３分で解説</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】Djangoテンプレートの基本を３分で理解するためのガイド。テンプレートの概念、テンプレート変数とテンプレートタグの使用方法について簡潔に説明します。手に取るように理解できる具体的なコード例も提供。DjangoでのWeb開発に必要な知識を素早く身につけましょう。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.08.02</div></div></div></div></a>
</div></figure>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">render関数の構文ルール</span></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">render(request, template_name, context)</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/def/">Python関数の使い方・基本</a></p>



<ol class="wp-block-list">
<li><code><span class="bold-blue">request</span></code>：ビュー関数に渡すHTTPリクエストオブジェクト</li>



<li><code><span class="bold-blue">template_name</span></code>：描画するテンプレートの名前</li>



<li><code><span class="bold-blue">context</span></code>：テンプレートに渡すデータを含む<a href="https://it-biz.online/python/python-dictionary/">辞書</a>（キーと値のペア）</li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>基本的な構文ルールは上記の通り。実際のサンプルコードを見ていきながら、それぞれの引数の役割、Djangoにおけるrender関数の使い方を確認していきましょう。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc3">render関数の使い方とコツ</span></h3>



<p>Djangoの<code>render</code>関数は主に<code><strong>views.py</strong></code>の中で利用されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoのビュー（views.py）の基本は以下の記事を参照してください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/views/" title="【Django】ビュー（views.py）：初心者向けに５ステップで解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/07/views-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/07/views-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/07/views-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/07/views-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Django】ビュー（views.py）：初心者向けに５ステップで解説</div><div class="blogcard-snippet internal-blogcard-snippet">Djangoのビューについての基本的な概念から詳細な手順までを網羅的に解説します。関数ベースビュー、クラスベースビュー、汎用ビュー、ビューのテストについて学びます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.07.10</div></div></div></div></a>
</div></figure>
</div></div>



<p>ビュー関数（クラスベースのビューのメソッド）はHTTPリクエストを受け取り、HTTPレスポンスを返す役割を担います。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="639" height="236" src="https://it-biz.online/wp-content/uploads/2023/07/image-7.png" alt="" class="wp-image-8156" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-7.png 639w, https://it-biz.online/wp-content/uploads/2023/07/image-7-300x111.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-7-500x185.png 500w" sizes="(max-width: 639px) 100vw, 639px" /><figcaption class="wp-element-caption">図1：Djangoのビュー</figcaption></figure>



<p>↑を実現するためにviews.py中で利用されるのが、<code>render</code>関数。<code>render</code>関数は、テンプレートをレンダリングし、その結果をHTTPレスポンスとして返します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># myapp/views.py

from django.shortcuts import render

def some_view(request):
    context = {"key": "value"}  # テンプレートに渡すためのデータ
    return render(request, "template_name.html", context)</pre>



<ol class="wp-block-list">
<li><code><span class="bold-blue">request</span></code>：HTTPリクエスト</li>



<li><span class="bold-blue">テンプレート名</span>：描画する<a href="https://it-biz.online/python/template/">テンプレート</a>の名前。ここでは<code>template_name.html</code>としています。Djangoは設定で指定されたテンプレートディレクトリを検索し、この名前のテンプレートを探します。</li>



<li><code><span class="bold-blue">context</span></code>：テンプレートに渡す<a href="https://it-biz.online/python/python-dictionary/">辞書</a>。テンプレート内でこれらの値を変数として使用することができます。</li>
</ol>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文</a> / <a href="https://it-biz.online/python/def/">def文</a></p>



<p>上記の例では、まず<code>django.shortcuts</code>から<strong><code>render</code>関数をインポート</strong>。続いて、<code>some_view</code>というビュー関数を定義しています。そして、<code>render</code>関数はテンプレートと<code>context</code>を使ってHTMLを生成し、そのHTMLを含むHTTPレスポンスオブジェクトを返します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ざっくり図解するとrender関数の役割は以下のようなイメージ。</p>



<p>指定されたビューが呼び出されると<strong><span class="marker-under">事前に定義したrender関数が、画面を描画するための情報を整理しレスポンス</span></strong>するような形です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="866" height="352" src="https://it-biz.online/wp-content/uploads/2023/07/image-8.png" alt="Django render関数" class="wp-image-8157" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-8.png 866w, https://it-biz.online/wp-content/uploads/2023/07/image-8-300x122.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-8-500x203.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-8-768x312.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-8-800x325.png 800w" sizes="(max-width: 866px) 100vw, 866px" /><figcaption class="wp-element-caption">図2：Django render関数</figcaption></figure>
</div></div>



<h2 class="wp-block-heading"><span id="toc4">render関数を利用する際の注意点</span></h2>



<p>Django初心者が躓きやすいrender関数の注意点を以下に整理します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の通りにコーディングしても、Djangoでうまく画面表示ができない・・・という方は以下のポイントをチェックしましょう！</p>
</div></div>



<ol class="wp-block-list">
<li><strong><span class="marker-under">テンプレートの場所</span></strong>: Djangoは設定ファイル（<code>settings.py</code>）で指定されたディレクトリからテンプレートとなるHTMLファイルを探します。そのため、テンプレートを適切な場所に配置していないと、Djangoはそれを見つけられずにエラーとなります。</li>



<li><strong><span class="marker-under">テンプレート変数の名前</span></strong>: コンテキストの辞書のキーは、テンプレート内での変数名として使用されます。これらの名前はテンプレート内で衝突しないように、適切に選ぶことが重要。</li>



<li><strong><span class="marker-under">存在しない変数の扱い</span></strong>: Djangoテンプレートでは、存在しない変数にアクセスした場合にはデフォルトで何も表示されず、エラーも出ません。これは意図しない結果をもたらす可能性があるので注意が必要。</li>



<li><strong><span class="marker-under">リクエストオブジェクトの引き渡し</span></strong>: <code>render</code>関数の最初の引数は、現在処理中のHTTPリクエストオブジェクトでなければなりません。これを忘れると、Djangoはエラーを返します。</li>



<li><strong><span class="marker-under">エスケープと安全性</span></strong>: Djangoテンプレートシステムは、デフォルトで変数の内容をHTMLエスケープします。これはセキュリティ対策として重要な機能ですが、エスケープしたくない場合には<code>safe</code>フィルタを使うなどの対策が必要です。</li>
</ol>



<p>以上のような点に注意しながら<code>render</code>関数を使用することで、エラーを防ぎ、期待通りの動作を得ることができるでしょう。</p>



<h2 class="wp-block-heading"><span id="toc5">Django：render関数のまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下のサンプルコードは、シンプルなDjangoのWebアプリケーションの一部として、<code>render</code>関数の使い方を示しています。</p>
</div></div>



<p class="has-text-align-center is-style-border-left-box has-box-style"><strong>urls.py</strong>（<code>ディレクトリ/urls.py</code>というパスに配置）</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import path
from . import views  # 同じディレクトリのviews.pyをインポート

urlpatterns = [
    path('', views.home, name='home'),  # ルートURL（http://yourdomain/）へのアクセスをviews.home関数にマッピング
]</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/urls-py/">urls.pyの役割</a></p>



<p class="has-text-align-center is-style-border-left-box has-box-style"><strong>views.py</strong>（<code>ディレクトリ/views.py</code>というパスに配置）</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.shortcuts import render

def home(request):
    # 'home.html'というテンプレートを描画し、コンテキストとして空の辞書を渡す
    return render(request, 'home.html', {})</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/views/">views.pyの役割</a></p>



<p class="has-text-align-center is-style-border-left-box has-box-style"><strong>home.html</strong>（<code>ディレクトリ/templates/home.html</code>というパスに配置）</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html>
&lt;head>
    &lt;title>ホームページ&lt;/title>
&lt;/head>
&lt;body>
    &lt;h1>ようこそ、Djangoのホームページへ！&lt;/h1>
&lt;/body>
&lt;/html></pre>



<p>この例では、ユーザがルートURL（例えばhttp://localhost:8000/）にアクセスすると、<code>home</code>ビュー関数が呼び出されます。この関数では、<code>render</code>関数を使用して<code>home.html</code>テンプレートを描画し、その結果をHTTPレスポンスとして返します。</p>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>初めてPython/Djangoを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Djangoとは？：Pythonの人気Webフレームワークを初心者向けに解説</title>
		<link>https://it-biz.online/python/django/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Fri, 30 Jun 2023 05:41:39 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=7986</guid>

					<description><![CDATA[Django（ジャンゴ）とは、Pythonで書かれた無料＆オープンソースのWebフレームワークのこと。 Pythonという言葉を聞いたことがあるかもしれませんが、Python自体は一種のプログラミング言語で、その上で動作 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>Django（ジャンゴ）</strong>とは、<a href="https://it-biz.online/python/python-abc/">Python</a>で書かれた無料＆オープンソースのWebフレームワークのこと。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>豊富な機能と簡単な拡張性により、開発者が迅速にメンテナンス性の高いWebアプリケーションを作成できるように設計されている点が特徴。</p>
</div></div>



<p>Pythonという言葉を聞いたことがあるかもしれませんが、Python自体は一種の<a href="https://it-biz.online/lifehack/programming-abc/">プログラミング言語</a>で、その上で動作するDjangoはその能力を最大限に引き出すためのツールです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この記事では、「Djangoって何？」「何のためにどうやって使われているの？」という疑問を解消すべく、IT初心者向けにDjangoの魅力とその基本的な使い方を分かりやすく解説します。一緒にDjangoの世界を探求していきましょう！</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>Webフレームワークの役割</li>



<li><strong>Django</strong>の特徴/利点/使用例</li>



<li>Djangoのインストール方法</li>



<li>Djangoでの基本的なWebアプリケーションの作り方
<ul class="wp-block-list">
<li>Djangoプロジェクトの作成</li>



<li>Djangoアプリケーションの作成</li>



<li>データベースの設定</li>



<li>View、URL、テンプレートの基本的な作り方</li>
</ul>
</li>
</ul>
</div>
</div></div>



<p>Pythonエンジニアであれば、<strong><span class="marker-under">知っておいて損はない基本知識の１つ</span></strong>。是非最後までご覧ください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Webフレームワークとは？</a></li><li><a href="#toc2" tabindex="0">Django（ジャンゴ）の特徴</a><ol><li><a href="#toc3" tabindex="0">Djangoの特徴１：DRY原則による効率的な開発</a></li><li><a href="#toc4" tabindex="0">Djangoの特徴２：セキュリティ対策</a></li><li><a href="#toc5" tabindex="0">Djangoの特徴３：高度な管理画面</a></li><li><a href="#toc6" tabindex="0">Djangoの特徴４：柔軟なデータベース設計</a></li></ol></li><li><a href="#toc7" tabindex="0">PythonとDjangoのインストール手順</a></li><li><a href="#toc8" tabindex="0">Djangoでの基本的なWebアプリケーションの作り方</a><ol><li><a href="#toc9" tabindex="0">Djangoプロジェクトの作成</a></li><li><a href="#toc10" tabindex="0">Djangoアプリケーションの作成</a></li><li><a href="#toc11" tabindex="0">データベースの設定</a></li><li><a href="#toc12" tabindex="0">View/URL/テンプレートの基本的な作り方</a></li></ol></li><li><a href="#toc13" tabindex="0">Python：Djangoのまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Webフレームワークとは？</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>はじめに、Webフレームワークとは何か、なぜそれが重要なのか？についてご説明します。</p>
</div></div>



<p>Webフレームワークは、一言で表すと「<strong><span class="marker-under">WebサイトやWebアプリケーションを作るための道具箱</span></strong>」です。</p>



<p>Webフレームワークがあることで、プログラマーは難解なコードを１から書く必要なく、複雑なWebアプリケーションを効率的に開発することができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、Webフレームワークには以下のような役割があります。</p>
</div></div>



<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title">Webフレームワークの主な役割</div>
<ul class="wp-block-list">
<li><strong>ルーティング</strong></li>



<li><strong>データベースとのインターフェース</strong></li>



<li><strong>テンプレートエンジン</strong></li>
</ul>
</div>



<p>これらの機能をフレームワークが提供してくれることで、開発者は複雑なWebアプリケーションも効率よく作成することができます。１から自分ですべてを作る必要がないので、必要な機能の開発にコストをかけることが可能。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>その一つがPythonで作られた<strong>Django</strong>です。</p>
</div></div>



<p>Djangoはこのような一般的なフレームワークの機能に加え、セキュリティ対策や管理画面など、より高度な機能を初めから備えており、世界中の様々なWebサイトがDjangoをベースに構築されています。</p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>Webサイト</th><th>概要</th></tr></thead><tbody><tr><td>Instagram</td><td>世界で最も人気のある写真共有サービスの一つ。<br>ユーザーは写真をアップロードしそれを他のユーザーと共有することが可能。</td></tr><tr><td>Mozilla</td><td>Firefoxの開発者であるMozilla Foundationの公式Webサイト。</td></tr><tr><td>Pinterest</td><td>ユーザーがイメージを「ピン」として保存し、<br>それらをテーマ別に分類することができるプラットフォーム。</td></tr><tr><td>The Washington Post</td><td>米国の主要な日刊新聞のWebサイト。<br>ニュース記事やコラム、ブログを提供しています。</td></tr></tbody></table></div><figcaption class="wp-element-caption">Djangoで構築された主なWebサイト</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>それでは、なぜDjangoが多くのWebサイトで利用されているのか？次の章ではDjangoの特徴や利点をわかりやすく解説します。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-info-circle"><span class="tab-caption-box-label-text block-box-label-text box-label-text">「ライブラリ」「パッケージ」「フレームワーク」</span></div><div class="tab-caption-box-content block-box-content box-content">
<p>Pythonを勉強している方は、ライブラリやパッケージといった単語を聞いたことがある方も多いかもしれません。ここでは、それらの関連性を整理しておきます。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/import/">モジュール/パッケージ/ライブラリの違いを３分で解説</a></p>



<ol class="wp-block-list">
<li><strong>ライブラリ</strong>：これはプログラミングにおいて、特定の機能を提供するコードの集まりのことを指します。例えば、数学的な計算を行うライブラリ、データをグラフとして描画するライブラリなどがあります。これらはプログラマーが自分で一からコードを書く手間を省くために存在します。</li>



<li><strong>パッケージ</strong>：パッケージは複数のライブラリやモジュールをひとまとめにしたものです。これらは特定の目的を達成するために、関連するライブラリやモジュールを一緒に管理し、利用しやすくするためのものです。</li>



<li><strong>フレームワーク</strong>：フレームワークはある種の"設計図"や"骨組み"のようなもので、開発者がアプリケーションを効率的に構築するための基盤を提供します。一般的には、特定のアーキテクチャやデザインパターンに基づいて設計されており、開発プロセスを標準化し、品質を向上させる役割を果たします。</li>
</ol>



<p>これらの関連性について説明すると、フレームワークは特定の目的を達成するための一連のパッケージやライブラリを組み合わせ、それらを一つの統一された構造の中に組み込んだものと言えます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>つまり、<strong><span class="marker-under">フレームワークは複数のパッケージやライブラリを利用して、それらを一つの全体として働くように組み合わせたもの</span></strong>です。</p>
</div></div>



<p>具体的にDjangoに置き換えて考えてみると、DjangoはWebアプリケーションを開発するためのフレームワークで、その内部にはWebページを作るためのテンプレートシステム、データベースを操作するためのORM、ウェブリクエストを処理するためのルーティングシステムなど、様々なライブラリやパッケージが組み込まれているものと考えられます。</p>



<p>これらを効率的に活用することで、ウェブアプリケーションの開発を効率化し、品質を高めることが可能になります。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc2">Django（ジャンゴ）の特徴</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoの主な特徴は以下の通り。</p>
</div></div>



<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title">Djangoの特徴</div>
<ul class="wp-block-list">
<li>DRY原則による効率的な開発</li>



<li>セキュリティ対策</li>



<li>高度な管理画面</li>



<li>柔軟なデータベース設計</li>
</ul>
</div>



<p>それぞれの内容について少しだけ深掘りしながら説明します。徐々にDjangoが何者であるか？がわかってくることと思います。</p>



<h3 class="wp-block-heading"><span id="toc3">Djangoの特徴１：DRY原則による効率的な開発</span></h3>



<p>DjangoではDRY（Don't Repeat Yourself）という原則が重視されています。これは「<strong><span class="marker-under">同じコードを何度も書かない</span></strong>」という意味です。</p>



<p>例えば、あなたが手紙を書くとき、同じ内容の手紙を5人に送るとします。それぞれの手紙を一から書くのは時間がかかりますよね。でも、一度書いた手紙のコピーを作れば、それほど時間はかかりません。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これがDRYの原則です。これにより、コードは整理され、保守も容易になります。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc4">Djangoの特徴２：セキュリティ対策</span></h3>



<p>Djangoはセキュリティを最初から考慮に入れて設計されています。</p>



<p>通常、セキュリティは設計・開発を行いながら、徐々にその精度や強度を高めていくものですが、Djangoを利用すれば最初からそれらのセキュリティのセットが組み込まれているので、効率的かつ安心に利用することができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoを使用すれば、SQLインジェクションやクロスサイトスクリプティングなど、Web開発における一般的なセキュリティの脅威から保護されます。</p>
</div></div>



<p>家を建ててから、鍵や防犯カメラを設置するのではなく、<strong><span class="marker-under">最初から鍵や防犯カメラが設置されている家</span></strong>を改築・増築していくようなイメージに近いかもしれません。</p>



<h3 class="wp-block-heading"><span id="toc5">Djangoの特徴３：高度な管理画面</span></h3>



<p>Djangoは初めから使える<strong><span class="marker-under">高機能な管理画面を提供</span></strong>しています。</p>



<p>これは、あなたが新しいスマートフォンを手に入れたときに、最初から便利なアプリがインストールされているのと同じ。これにより、ユーザー管理やコンテンツの管理が容易になります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>通常、0からWebアプリケーションを開発する際には、当たり前ですが管理画面も存在しないため、必要であれば自分で管理画面を作成します。その手間が省けるというのがDjangoを利用するメリットの１つ。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">Djangoの特徴４：柔軟なデータベース設計</span></h3>



<p>Djangoでは<strong><span class="marker-under">データベース設計が非常に柔軟に行えます。</span></strong></p>



<p>Djangoのオブジェクトリレーショナルマッピング（ORM）という機能を用いると、<a href="https://it-biz.online/it-skills/index/">データベース</a>の操作がPythonのコードで直感的に書けるようになります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Python自体でデータベース設計を行うことも可能ですが、Pythonだけでデータベースを操作するためには、<a href="https://it-biz.online/it-skills/sql/">SQL（Structured Query Language）</a>というデータベースを操作するための言語を学び、直接SQLを書く必要があります。</p>
</div></div>



<p>対して、Djangoを利用すればORMが利用できるので、Pythonのコードだけでデータベース操作が可能となります。これにより、SQLの詳細な知識がなくても、直感的にデータベース操作が行えるという点が特徴。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>さらにDjangoでは、データベースのスキーマ（構造）を定義するためのモデルという概念が提供されています。これを用いることで、Pythonのクラス定義だけでデータベースのスキーマを定義することができ、コードの見通しが良くなります。このような機能があるため、Djangoを用いるとPythonだけでデータベース設計を行うよりも手間が大幅に削減できます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc7">PythonとDjangoのインストール手順</span></h2>



<p>Djangoを利用するためには、まずPythonとDjangoを自身のコンピューターにインストールする必要があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>その詳細な手順は別記事にて詳しく解説していますが、概要を以下に説明します。</p>
</div></div>



<p class="has-text-align-center"><span class="badge-blue">ステップ１</span></p>



<p><strong>Pythonのインストール</strong>：Pythonは多くのオペレーティングシステムで使用可能です。公式ウェブサイトからダウンロードし、インストールします。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/install/" title="【Windows版】Pythonのインストール方法をわかりやすく３分で解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2021/02/python-install-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2021/02/python-install-320x180.png 320w, https://it-biz.online/wp-content/uploads/2021/02/python-install-300x168.png 300w, https://it-biz.online/wp-content/uploads/2021/02/python-install-500x279.png 500w, https://it-biz.online/wp-content/uploads/2021/02/python-install-768x429.png 768w, https://it-biz.online/wp-content/uploads/2021/02/python-install-800x447.png 800w, https://it-biz.online/wp-content/uploads/2021/02/python-install-240x135.png 240w, https://it-biz.online/wp-content/uploads/2021/02/python-install-640x360.png 640w, https://it-biz.online/wp-content/uploads/2021/02/python-install-1024x572.png 1024w, https://it-biz.online/wp-content/uploads/2021/02/python-install.png 1090w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Windows版】Pythonのインストール方法をわかりやすく３分で解説</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】Pythonを１から学習しようとしている方のために、最初の第１歩となるPythonのインストール方法から、プログラムの実行まで画像付きでまとめました。初心者でも分かりやすいように、完全図解（コマンドはコピペ可）で説明します。本ページを読み切れば、自分のパソコンでPythonを実行することができるようになります。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.06.14</div></div></div></div></a>
</div></figure>



<p class="has-text-align-center"><span class="badge-blue">ステップ２</span></p>



<p>Djangoのインストール：Pythonをインストールした後、Pythonのパッケージ管理システム（pip）を使用してDjangoをインストールします。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/it-skills/vps-python/" title="【簡単９ステップ】VPS上にPythonの実行環境を構築する方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2023/04/vps-python-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2023/04/vps-python-320x180.png 320w, https://it-biz.online/wp-content/uploads/2023/04/vps-python-240x135.png 240w, https://it-biz.online/wp-content/uploads/2023/04/vps-python-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【簡単９ステップ】VPS上にPythonの実行環境を構築する方法</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、VPS上にPythonの実行環境を構築する手順をわずか5分で学べます。シンプルかつ詳細なガイドラインに従って、プログラミングスキルを新たなレベルに引き上げましょう。初心者でも安心のステップバイステップの方法を提供します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.06.30</div></div></div></div></a>
</div></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>↑こちらの記事では<a href="https://it-biz.online/lifehack/virtual-private-server/">VPS</a>上にPythonの実行環境を構築する手順を解説しています。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc8">Djangoでの基本的なWebアプリケーションの作り方</span></h2>



<p>Djangoを用いてWebアプリケーションを作る流れを簡単に説明します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>まずは、新たなDjangoプロジェクトを作成するところから始めましょう。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc9">Djangoプロジェクトの作成</span></h3>



<p>DjangoでWebアプリケーションを作るためには、まず<strong>Djangoプロジェクト</strong>を作成する必要があります。</p>



<p>Djangoプロジェクトとは、あなたのWebアプリケーション全体を指す「コンテナ」「箱」「入れ物」のようなもので、アプリケーションの設定やデータベースの設定など、アプリケーション全体に関わる情報を管理するもの。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoプロジェクトの作成は非常に簡単で、以下のコマンド一つで新たなプロジェクトを作成できます。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">django-admin startproject myproject</pre>



<p>このコマンドを実行すると、「myproject」（名前は任意で変更可能）という名前の新たなDjangoプロジェクトが作成されます。プロジェクト内部には、最初から基本的な設定が行われた設定ファイルやURLのルーティングを管理するファイルなどが含まれています。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="801" height="282" src="https://it-biz.online/wp-content/uploads/2023/06/image-48.png" alt="Djangoプロジェクト" class="wp-image-7993" srcset="https://it-biz.online/wp-content/uploads/2023/06/image-48.png 801w, https://it-biz.online/wp-content/uploads/2023/06/image-48-300x106.png 300w, https://it-biz.online/wp-content/uploads/2023/06/image-48-500x176.png 500w, https://it-biz.online/wp-content/uploads/2023/06/image-48-768x270.png 768w" sizes="(max-width: 801px) 100vw, 801px" /><figcaption class="wp-element-caption">図1：Djangoプロジェクト（１）</figcaption></figure>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="774" height="285" src="https://it-biz.online/wp-content/uploads/2023/06/image-49.png" alt="Djangoプロジェクト" class="wp-image-7994" srcset="https://it-biz.online/wp-content/uploads/2023/06/image-49.png 774w, https://it-biz.online/wp-content/uploads/2023/06/image-49-300x110.png 300w, https://it-biz.online/wp-content/uploads/2023/06/image-49-500x184.png 500w, https://it-biz.online/wp-content/uploads/2023/06/image-49-768x283.png 768w" sizes="(max-width: 774px) 100vw, 774px" /><figcaption class="wp-element-caption">図2：Djangoプロジェクト（２）</figcaption></figure>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>ファイル<br>ディレクトリ</th><th>説明</th></tr></thead><tbody><tr><td>myproject/</td><td>プロジェクトのルートディレクトリ。<br>このディレクトリ名は、<code><strong>startproject</strong></code>コマンドで指定したプロジェクト名。</td></tr><tr><td>├── myproject/</td><td>Djangoプロジェクトの設定ディレクトリ。<br>このディレクトリ名も、<code>startproject</code>コマンドで指定したプロジェクト名。</td></tr><tr><td>│ ├── init.py</td><td>Pythonのパッケージを表すための空ファイル。</td></tr><tr><td>│ ├── settings.py</td><td>プロジェクトの設定ファイル。<br>データベースの設定、インストールされたアプリケーションのリスト、<br>テンプレートの設定、ミドルウェアの設定など。<br>プロジェクト全体に関わる設定がここに記述されます。</td></tr><tr><td>│ ├── urls.py</td><td>プロジェクトのURL設定ファイル。<br>URLとビューを結びつけるためのルーティング設定がここに記述されます。</td></tr><tr><td>│ └── wsgi.py</td><td>プロジェクトを配信するためのWSGIアプリケーションのエントリポイント。<br>WebサーバとDjangoアプリケーションをつなげる役割を果たします。</td></tr><tr><td>└── manage.py</td><td>Djangoプロジェクトを管理するためのコマンドラインユーティリティ。<br>Djangoアプリケーションの作成、開発用サーバの起動など。<br>Djangoに関連する様々なタスクをこのスクリプトを通じて行います。</td></tr></tbody></table></div></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記はDjangoプロジェクトを新規に作成したときの最初のディレクトリ構成。</p>



<p>この中に新たなDjangoアプリケーションを作成したり、追加の設定を行ったりすることで、Webアプリケーションを作り上げていきます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc10">Djangoアプリケーションの作成</span></h3>



<p>Djangoプロジェクトを作成した後、次に行うのが<strong>Djangoアプリケーション</strong>の作成です。Djangoアプリケーションは、特定の機能を持つ一つのモジュールを指します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、ブログ機能、ユーザー管理機能、商品管理機能などはそれぞれ機能ごとに別のアプリケーションとして作成していきます。</p>
</div></div>



<p>Djangoアプリケーションの作成もコマンド一つで行うことができます。以下のコマンドで新たなアプリケーションを作成します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python manage.py startapp myapp</pre>



<p>上記のコマンドを実行すると、「myapp」という新たなDjangoアプリケーションが作成されます。</p>



<p>アプリケーション内部には、モデル（データベースの構造を定義）、ビュー（アプリケーションの「見た目」を制御）、URLの設定などを行うための基本的なファイル群が自動的に作成されます。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="782" height="307" src="https://it-biz.online/wp-content/uploads/2023/06/image-50.png" alt="Djangoアプリケーション" class="wp-image-7995" srcset="https://it-biz.online/wp-content/uploads/2023/06/image-50.png 782w, https://it-biz.online/wp-content/uploads/2023/06/image-50-300x118.png 300w, https://it-biz.online/wp-content/uploads/2023/06/image-50-500x196.png 500w, https://it-biz.online/wp-content/uploads/2023/06/image-50-768x302.png 768w" sizes="(max-width: 782px) 100vw, 782px" /><figcaption class="wp-element-caption">図3：Djangoアプリケーション</figcaption></figure>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>ファイル名</th><th>内容</th></tr></thead><tbody><tr><td><code>__init__.py</code></td><td>パッケージの初期化を担当する特殊なPythonファイル。<br>このファイルがあることで、<br>Djangoはこのディレクトリをパッケージとして扱う。</td></tr><tr><td><code>admin.py</code></td><td>Djangoの管理インターフェースでモデルを操作する設定を行う。</td></tr><tr><td><code>apps.py</code></td><td>アプリケーションの設定を行うためのファイル。<br>アプリケーションの名前や設定などを記述します。</td></tr><tr><td><code>migrations/</code></td><td>このディレクトリはデータベーススキーマの<br>マイグレーション（変更）履歴を管理するために使われます。</td></tr><tr><td><code>models.py</code></td><td>アプリケーションで使用するデータベースのテーブルを<br><a href="https://it-biz.online/python/class-2/">Pythonのクラス</a>として定義する。</td></tr><tr><td><code>tests.py</code></td><td>テストを書くためのファイルです。<br>Djangoはテスト駆動開発を強く推奨しており、<br>新しい機能を開発する前にまずそのテストを書くことを推奨している。</td></tr><tr><td><code>views.py</code></td><td>ユーザーがブラウザでアクセスしたときに<br>表示されるページ内容を決めるためのファイル。<br>各ページにどのようなデータを表示するのか、<br>どのテンプレートを使用するのかなどを定義します。</td></tr></tbody></table></div></figure>



<p>このように、Djangoでは<strong>プロジェクトとアプリケーションの概念をうまく分離して管理</strong>することで、１つの大きなWebアプリケーションを小さな部品（アプリケーション）の集合体として扱うことができます。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-search"><span class="tab-caption-box-label-text block-box-label-text box-label-text">プロジェクトとアプリケーションの関係をわかりやすく・・・</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoのプロジェクトとアプリケーションの関係は、街（プロジェクト）とその中の建物（アプリケーション）という関係性に似ています。</p>
</div></div>



<p>例えば、街（プロジェクト）を考えてみましょう。</p>



<p>街全体の設計図（設定ファイル）があり、それにより街の全体像が定まります。その設計図に基づいて、道路が作られ、街の全体的なレイアウトが決定します。</p>



<p>そして、街にはさまざまな建物（アプリケーション）が存在します。例えば、レストラン、図書館、ショッピングモールなどがそれに当たります。これらの建物はそれぞれ特別な目的を持っています。レストランでは食事を提供し、図書館では書籍を提供し、ショッピングモールではさまざまな商品を提供。</p>



<p>このように、Djangoのプロジェクト（街）は全体的な構造や設定を定義し、アプリケーション（建物）はその中で特定の機能（レストランの食事、図書館の書籍など）を提供します。そしてこれらが組み合わさることで、一つの完全なWebサイトが構築されるわけです。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc11">データベースの設定</span></h3>



<p>Djangoは<strong>多種多様なデータベースエンジンとの連携が可能</strong>で、その設定方法は非常にシンプルです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここではその設定方法について、初心者の方でも理解できるよう詳しく説明します。</p>
</div></div>



<p>まず、Djangoでのデータベースの設定は、<code><strong>settings.py</strong></code>というファイルに書かれます。具体的には、<code>settings.py</code>内にある<code>DATABASES</code>という部分にデータベースの設定を書きます。この設定はPythonの<a href="https://it-biz.online/python/python-dictionary/">辞書型</a>という形式で記述されます。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="774" height="267" src="https://it-biz.online/wp-content/uploads/2023/06/image-51.png" alt="Django データベースの設定" class="wp-image-7996" srcset="https://it-biz.online/wp-content/uploads/2023/06/image-51.png 774w, https://it-biz.online/wp-content/uploads/2023/06/image-51-300x103.png 300w, https://it-biz.online/wp-content/uploads/2023/06/image-51-500x172.png 500w, https://it-biz.online/wp-content/uploads/2023/06/image-51-768x265.png 768w" sizes="(max-width: 774px) 100vw, 774px" /><figcaption class="wp-element-caption">図4：Django データベースの設定</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>デフォルトの設定では、DjangoはSQLiteという<a href="vhttps://it-biz.online/it-skills/dbms/">DBMS</a>を使用します。これは小規模なアプリケーションには適していますが、大規模なアプリケーションの場合はPostgreSQLやMySQLといったデータベースエンジンを使うことが多いです。</p>
</div></div>



<p>MySQLを利用する場合、<code>settings.py</code>内の<code>DATABASES</code>セクションは以下のように書き換えます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}</pre>



<ul class="wp-block-list">
<li><code><strong>ENGINE</strong></code>: 使用するDBMS。MySQLの場合は<code>django.db.backends.mysql</code>となります。</li>



<li><code>NAME</code>: 使用するデータベースの名前。あらかじめMySQLで作成しておく必要があります。</li>



<li><code>USER</code>: データベースのユーザー名。該当のデータベースにアクセス可能なユーザーを指定します。</li>



<li><code>PASSWORD</code>: データベースのユーザーのパスワード。</li>



<li><code>HOST</code>: データベースサーバーのホスト名または<a href="https://it-biz.online/it-skills/ip-address/">IPアドレス</a>。同一マシン内で動作させる場合は<code>localhost</code>を指定。</li>



<li><code>PORT</code>: データベースサーバーの<a href="https://it-biz.online/it-skills/port/">ポート番号</a>。MySQLのデフォルトは<code>3306</code>です。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以上の設定を行うことで、DjangoからMySQLデータベースにアクセスできるようになります。</p>
</div></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>ただし、DjangoがMySQLと通信するためには、PythonのMySQLクライアントが必要で、<code>mysqlclient</code>や<code>PyMySQL</code>などが一般的に利用されます。これらは追加でインストールする必要があります。</p>
</div>



<h3 class="wp-block-heading"><span id="toc12">View/URL/テンプレートの基本的な作り方</span></h3>



<p>Djangoの魅力の一つは、View、URL、テンプレートという3つの要素が連携してWebアプリケーションを構築するアーキテクチャ――<strong><span class="marker-under">MTV (Model Template View) </span></strong>と呼ばれるアーキテクチャを採用しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>それぞれの要素の役割と、その基本的な作り方を見ていきましょう。</p>
</div></div>



<h4 class="wp-block-heading">Viewの作り方</h4>



<p>Viewは、ユーザーからのリクエストを受け取り、適切なレスポンスを生成する役割を果たします。基本的にはPythonの<a href="https://it-biz.online/python/def/">関数</a>または<a href="https://it-biz.online/python/class-2/">クラス</a>として定義します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, world!")</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文</a> / <a href="https://it-biz.online/python/print/">print関数</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の<code>hello</code>関数は、リクエストを受け取り、文字列 "Hello, world!" をレスポンスとして返します。</p>
</div></div>



<h4 class="wp-block-heading">URLの設定</h4>



<p>URL設定は、ユーザーがブラウザでURLを入力したとき、そのリクエストをどのViewに送るべきかを決定します。<code>urls.py</code>にパスと対応するViewを指定することで、URLの設定を行います。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下に、先程作成した<code>hello</code>関数を対応させるURLの設定例を示します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello, name='hello'),
]</pre>



<h4 class="wp-block-heading">テンプレートの作り方</h4>



<p>テンプレートは、HTMLを生成するためのファイル。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/html-basic/">HTMLとは？</a></p>



<p>テンプレートを利用することで動的なデータを簡単にHTMLに組み込むことができます。Djangoは、テンプレート言語を用いて、Pythonの変数や命令をHTML内に埋め込むことが可能です。以下に、シンプルなテンプレートの例を示します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html>
&lt;head>
    &lt;title>My First Django Page&lt;/title>
&lt;/head>
&lt;body>
    &lt;h1>Hello, {{ name }}!&lt;/h1>
&lt;/body>
&lt;/html></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここでは、<code>{{ name }}</code>がテンプレート変数で、この部分がViewから渡された値に置き換わります。</p>
</div></div>



<p>これら3つの要素――View、URL、テンプレート――がうまく連携することで、Djangoでは動的で豊富な機能を持つWebアプリケーションを簡単に作り上げることができます。</p>



<h2 class="wp-block-heading"><span id="toc13">Python：Djangoのまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<ol class="wp-block-list">
<li><strong>Djangoとは</strong>・・・
<ul class="wp-block-list">
<li>Pythonで作成されたWebフレームワーク</li>
</ul>



<ul class="wp-block-list">
<li>Webアプリケーション開発に必要なすべてを１つに集約</li>
</ul>
</li>



<li><strong>Djangoの特長</strong>
<ul class="wp-block-list">
<li>レスポンシブな開発: PCやスマホなど様々なデバイスに対応したWebアプリケーションを短時間で作成可能</li>



<li>高度な管理画面: データの管理を手軽に行える自動生成される管理サイトを提供</li>



<li>柔軟なデータベース設計: ORM（Object-Relational Mapping）を利用したデータベース操作を可能にする</li>
</ul>
</li>



<li><strong>Djangoプロジェクトとアプリケーション</strong>
<ul class="wp-block-list">
<li>プロジェクト: DjangoのWebアプリケーション全体を管理するためのコンテナ</li>



<li>アプリケーション: 一つの機能やウェブサイトの一部を実現する単位</li>
</ul>
</li>



<li><strong>データベース設定</strong>
<ul class="wp-block-list">
<li>Djangoのsettings.pyでデータベースの設定を行う</li>



<li>使うデータベースに応じて設定を変える（例: SQLite, PostgreSQL, MySQLなど）</li>
</ul>
</li>



<li><strong>View、URL、テンプレートの基本的な作り方</strong>
<ul class="wp-block-list">
<li>View: ユーザーからのリクエストを受け取り、適切なレスポンスを生成</li>



<li>URL: リクエストをどのViewに送るべきかを決定</li>



<li>テンプレート: HTMLを生成するためのファイル、動的なデータを簡単にHTMLに組み込むことができる</li>
</ul>
</li>
</ol>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>始めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Django】ビュー（views.py）：初心者向けに５ステップで解説</title>
		<link>https://it-biz.online/python/views/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 04 Jul 2023 04:27:12 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8011</guid>

					<description><![CDATA[Djangoにおけるビュー（views.py）は、ユーザーからのリクエストを受け取り、それに基づいたレスポンスを生成するコンポーネントです。言い換えると、ユーザーとアプリケーションの間のインターフェースの役割を果たすのが [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://it-biz.online/python/django/">Django</a>における<strong>ビュー（views.py）</strong>は、ユーザーからのリクエストを受け取り、それに基づいたレスポンスを生成するコンポーネントです。言い換えると、ユーザーとアプリケーションの間のインターフェースの役割を果たすのがビューです。</p>



<p>この記事では、Djangoのビュー（views.py）について、初心者でも理解できるように詳しく解説します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>具体的には、ビューの基本的な作成方法から、より高度な<strong>リストビュー</strong>や<strong>フォームビュー</strong>の活用方法までを、5つのステップに分けて学んでいきます。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li><strong>ステップ1：ビューとは</strong></li>



<li><strong>ステップ2：関数ベースビューの作成</strong></li>



<li><strong>ステップ3：クラスベースビューの作成</strong></li>



<li><strong>ステップ4：汎用ビューの活用</strong>
<ul class="wp-block-list">
<li>リストビュー</li>



<li>ディテールビュー</li>



<li>フォームビュー</li>
</ul>
</li>



<li><strong>ステップ5：ビューのテスト方法</strong></li>
</ul>
</div>
</div></div>



<p>Pythonエンジニア/Djangoを利用したWeb開発者を目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>。是非最後までご覧ください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Djangoのビュー（view）とは？</a></li><li><a href="#toc2" tabindex="0">関数ベースビューの作成</a></li><li><a href="#toc3" tabindex="0">クラスベースビューの作成</a></li><li><a href="#toc4" tabindex="0">クラスベースビューの拡張（汎用ビューの活用）</a><ol><li><a href="#toc5" tabindex="0">Django：ListView</a></li><li><a href="#toc6" tabindex="0">Django：DetailView</a></li><li><a href="#toc7" tabindex="0">Django：CreateView</a></li><li><a href="#toc8" tabindex="0">Django：UpdateView</a></li><li><a href="#toc9" tabindex="0">Django：DeleteView</a></li></ol></li><li><a href="#toc10" tabindex="0">ビューのテスト</a><ol><li><a href="#toc11" tabindex="0">ステップ1：テストケースの作成</a></li><li><a href="#toc12" tabindex="0">ステップ2：テストメソッドの定義</a></li><li><a href="#toc13" tabindex="0">ステップ3：ビューのテスト</a></li></ol></li><li><a href="#toc14" tabindex="0">Django：ビュー（views.py）のまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Djangoのビュー（view）とは？</span></h2>



<p>Djangoにおけるビューは、<strong><span class="marker-under">ユーザーからのリクエストを受け取り、それに基づいたレスポンスを生成するコンポーネント</span></strong>です。つまり、ユーザーとアプリケーションの間のインターフェースの役割を果たします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ビューはDjangoアプリケーションの中心的な部分であり、その動作を理解することは、Djangoでの開発スキルを向上させるために重要です。</p>
</div></div>



<p>ビューは基本的にPythonの<a href="https://it-biz.online/python/def/">関数</a>または<a href="https://it-biz.online/python/class-2/">クラス</a>として定義されます。その役割はユーザーからのHTTPリクエストを受け取り、HTTPレスポンスを返すことです。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="716" height="237" src="https://it-biz.online/wp-content/uploads/2023/07/image.png" alt="Djangoのビュー" class="wp-image-8015" srcset="https://it-biz.online/wp-content/uploads/2023/07/image.png 716w, https://it-biz.online/wp-content/uploads/2023/07/image-300x99.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-500x166.png 500w" sizes="(max-width: 716px) 100vw, 716px" /><figcaption class="wp-element-caption">図1：Djangoのビュー</figcaption></figure>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/http/">HTTPリクエスト/HTTPレスポンスとは？</a></p>



<p>このレスポンスは通常、<a href="https://it-biz.online/web-design/html-basic/">HTML形式</a>のWebページですが、JSON形式のデータや、リダイレクト、404エラーなど、他の任意の形式のレスポンスも可能です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ビューは<code><strong>views.py</strong></code>という名前のPythonファイルに定義されます。このファイルはDjangoアプリケーションを作成した際に自動的にディレクトリ内に保存されます。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="501" src="https://it-biz.online/wp-content/uploads/2023/07/image-1-1024x501.png" alt="Django view.py" class="wp-image-8016" srcset="https://it-biz.online/wp-content/uploads/2023/07/image-1-1024x501.png 1024w, https://it-biz.online/wp-content/uploads/2023/07/image-1-300x147.png 300w, https://it-biz.online/wp-content/uploads/2023/07/image-1-500x245.png 500w, https://it-biz.online/wp-content/uploads/2023/07/image-1-768x376.png 768w, https://it-biz.online/wp-content/uploads/2023/07/image-1-800x392.png 800w, https://it-biz.online/wp-content/uploads/2023/07/image-1.png 1087w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">図2：Django view.py</figcaption></figure>
</div></div>



<p>ビューの基本的な<strong>作成方法は2つ</strong>。１つは関数ベースのビュー、もう１つはクラスベースのビューです。</p>



<p>以下に、関数ベースのビューとクラスベースのビューの特徴と違いを表形式で整理しました。</p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th></th><th>関数ベースビュー</th><th>クラスベースビュー</th></tr></thead><tbody><tr><td>定義方法</td><td>Pythonの関数として定義</td><td>Pythonのクラスとして定義</td></tr><tr><td>適用範囲</td><td>小規模なアプリケーションや単純なビュー</td><td>大規模なアプリケーションや複雑なビュー</td></tr><tr><td>特徴</td><td>シンプルで直感的な構造</td><td>再利用性と拡張性が高い</td></tr><tr><td>メソッド</td><td>HTTPメソッド（GET, POSTなど）ごとに条件分岐が必要</td><td>HTTPメソッドごとに異なるメソッド（get(), post()など）を定義できる</td></tr><tr><td>ミックスイン</td><td>使用不可</td><td>使用可能（複数のビヘイビアを組み合わせることが可能）</td></tr><tr><td>例</td><td><code>def hello_world(request): return HttpResponse("Hello, World!")</code></td><td><code>class HelloWorldView(TemplateView): template_name = "hello_world.html"</code></td></tr></tbody></table></div></figure>



<p>関数ベースのビューはそのシンプルさから理解しやすく、小規模なアプリケーションや単純なビューの作成に適しています。一方、クラスベースのビューは再利用性と拡張性が高く、大規模なアプリケーションや複雑なビューの作成に適しているのが特徴。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>それぞれの作成方法について次の章で解説していきます。Djangoのビューについてさらに深掘りしていきましょう。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc2">関数ベースビューの作成</span></h2>



<p>関数ベースのビューは、Pythonの関数として定義され、<strong><span class="marker-under">１つのHTTPリクエストに対して１つのHTTPレスポンスを返します。</span></strong></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この関数は、リクエストを引数として受け取り、レスポンスを戻り値として返します。</p>
</div></div>



<p>早速、具体的なコードを見てみましょう。以下は、最も基本的な関数ベースのビューの例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Hello, World!")</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/py-import/">import文 </a>/ <a href="https://it-biz.online/python/def/">def文</a></p>



<p>このコードは、<code>hello_world</code>という名前のビューを定義。このビューは、HTTPリクエストを受け取り、"Hello, World!"というテキストを含むHTTPレスポンスを返します。</p>



<p>関数ベースのビューは、そのシンプルさから、小規模なアプリケーションや単純なビューの作成に適しています。しかし、<strong>大規模なアプリケーションや複雑なビューを作成する場合には、クラスベースのビューを使用することが推奨</strong>されます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>先ほどのビューをDjangoアプリケーションで使用するには、URLconf（URL設定）にこのビューを追加する必要があります。</p>



<p>URLconfは、URLとビューをマッピングするための設定で、<code>urls.py</code>という名前のPythonファイルに定義されます。以下は、先ほど定義した<code>hello_world</code>ビューをURLconfに追加する例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import path
from .views import hello_world

urlpatterns = [
    path('hello/', hello_world),
]</pre>



<p>例えば、あなたがローカル環境でDjangoアプリケーションを実行しているとします。通常、ローカル環境でDjangoアプリケーションを実行すると、<code>http://127.0.0.1:8000/</code>または<code>http://localhost:8000/</code>というURLでアクセスできます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このとき、<code>hello_world</code>ビューを<code>/hello/</code>というURLにマッピングした場合、<code>http://127.0.0.1:8000/hello/</code>または<code>http://localhost:8000/hello/</code>というURLにアクセスすると、"Hello, World!"というテキストが表示されます。</p>
</div></div>
</div>



<h2 class="wp-block-heading"><span id="toc3">クラスベースビューの作成</span></h2>



<p>関数ベースのビューがシンプルで直感的な一方で、クラスベースのビューはその再利用性と拡張性から、より大規模なアプリケーションや複雑なビューの作成に適しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>クラスベースのビューはPythonのクラスとして定義され、Djangoが提供するビューの親クラスを継承して作成します。</p>
</div></div>



<p>早速、こちらも具体的なコードを見てみましょう。以下は、最も基本的なクラスベースのビューの例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.views.generic import TemplateView

class HelloWorldView(TemplateView):
    template_name = "hello_world.html"</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/class-2/">class文</a> / <a href="https://it-biz.online/python/variable-python/">変数の基本</a></p>



<p>このコードは、<code>HelloWorldView</code>という名前のビューを定義。このビューは、<code>TemplateView</code>というDjangoが提供するビューの親クラスを継承しており、<code>hello_world.html</code>というテンプレートを使用してHTTPレスポンスを生成します。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>このビューをDjangoアプリケーションで使用するには、関数ベースのビューと同様に、URLconfにこのビューを追加する必要があります。</p>



<p><strong>ただし、クラスベースのビューをURLconfに追加するときには、ビューのクラス名に<code>as_view()</code>メソッドを追加する必要</strong>があります。以下は、先ほど定義した<code>HelloWorldView</code>ビューをURLconfに追加する例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.urls import path
from .views import HelloWorldView

urlpatterns = [
    path('hello/', HelloWorldView.as_view()),
]</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このコードは、<code>/hello/</code>というURLがリクエストされたときに、<code>HelloWorldView</code>ビューが呼び出されるように設定しています。つまり、ユーザーが<code>http://127.0.0.1:8000/hello/</code>または<code>http://localhost:8000/hello/</code>というURLにアクセスすると、<code>hello_world.html</code>というテンプレートが表示されます。</p>
</div></div>
</div>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th></th><th>関数ベースビュー</th><th>クラスベースビュー</th></tr></thead><tbody><tr><td>定義方法</td><td>Pythonの関数として定義</td><td>Pythonのクラスとして定義</td></tr><tr><td>適用範囲</td><td>小規模なアプリケーションや単純なビュー</td><td>大規模なアプリケーションや複雑なビュー</td></tr><tr><td>特徴</td><td>シンプルで直感的な構造</td><td>再利用性と拡張性が高い</td></tr><tr><td>メソッド</td><td>HTTPメソッド（GET, POSTなど）ごとに条件分岐が必要</td><td>HTTPメソッドごとに異なるメソッド（get(), post()など）を定義できる</td></tr><tr><td>ミックスイン</td><td>使用不可</td><td>使用可能（複数のビヘイビアを組み合わせることが可能）</td></tr><tr><td>例</td><td><code>def hello_world(request): return HttpResponse("Hello, World!")</code></td><td><code>class HelloWorldView(TemplateView): template_name = "hello_world.html"</code></td></tr></tbody></table></div></figure>



<p>以上が、クラスベースのビューの基本的な作成方法とその使用方法です。次の章では、クラスベースのビューをさらに拡張する方法について解説します。</p>



<h2 class="wp-block-heading"><span id="toc4">クラスベースビューの拡張（汎用ビューの活用）</span></h2>



<p>クラスベースのビューは、その再利用性と拡張性から、より<strong><span class="marker-under">大規模なアプリケーションや複雑なビューの作成</span></strong>に適しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Djangoの汎用ビュー（Generic Views）は、一般的なWeb開発タスクを簡単に行うための、多くの組み込みビューを提供しています。これらのビューは、クラスベースのビューを拡張して作成されています。汎用ビューを使用すると、特定のタスクを実行するためのコードを大幅に減らすことができます。</p>
</div></div>



<p>たとえば、Djangoには、データベースからオブジェクトを取得して表示するための<code>ListView</code>、新しいオブジェクトを作成するための<code>CreateView</code>、既存のオブジェクトを更新するための<code>UpdateView</code>、オブジェクトを削除するための<code>DeleteView</code>など、多くの汎用ビューがあります。</p>



<h3 class="wp-block-heading"><span id="toc5">Django：ListView</span></h3>



<p><code>ListView</code>は、あるモデルのオブジェクトのリストを表示するためのビューです。デフォルトでは、これは全てのオブジェクトを取得しますが、<code>get_queryset</code>メソッドをオーバーライドすることでカスタマイズできます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.views.generic import ListView
from .models import Book

class BookListView(ListView):
    model = Book
    template_name = 'books/book_list.html'  # &lt;app>/&lt;model>_&lt;viewtype>.html</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このビューは、<code>Book</code>モデルの全インスタンスをリストで表示するビューです。<code>template_name</code>で指定されたテンプレートを用いて表示します。ここでは <code>books/book_list.html</code> と指定しています。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/models/">Djangoのモデル</a></p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">Django：DetailView</span></h3>



<p><code>DetailView</code>は、単一のオブジェクトの詳細を表示するためのビューです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.views.generic import DetailView
from .models import Book

class BookDetailView(DetailView):
    model = Book
    template_name = 'books/book_detail.html'  # &lt;app>/&lt;model>_&lt;viewtype>.html</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このビューは、<code>Book</code>モデルの単一のインスタンス（＝レコード）の詳細を表示するビューです。具体的なインスタンスはURLから取得されます（一般的にはプライマリキー）。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc7">Django：CreateView</span></h3>



<p><code>CreateView</code>は、新たなオブジェクトを作成するためのビューです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.views.generic.edit import CreateView
from .models import Book

class BookCreateView(CreateView):
    model = Book
    fields = ['name', 'author', 'price']  # ここにモデルのフィールドを記述
    template_name = 'books/book_form.html'  # &lt;app>/&lt;model>_&lt;viewtype>.html</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このビューは、新しい<code>Book</code>インスタンスを作成するためのフォームを表示し、そのフォームの送信を処理するビューです。ここで<code>fields</code>は<a href="https://it-biz.online/web-design/form/">フォーム</a>に表示するフィールドを指定します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc8">Django：UpdateView</span></h3>



<p><code>UpdateView</code>は、既存のオブジェクトを更新するためのビューです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.views.generic.edit import UpdateView
from .models import Book

class BookUpdateView(UpdateView):
    model = Book
    fields = ['name', 'author', 'price']
    template_name = 'books/book_form.html'  # &lt;app>/&lt;model>_&lt;viewtype>.html</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このビューは、既存の<code>Book</code>インスタンスを更新するためのフォームを表示し、そのフォームの送信を処理します。編集するインスタンスはURLから取得されます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc9">Django：DeleteView</span></h3>



<p><code>DeleteView</code>は、既存のオブジェクトを削除するためのビューです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.views.generic.edit import DeleteView
from .models import Book

class BookDeleteView(DeleteView):
    model = Book
    template_name = 'books/book_confirm_delete.html'  # &lt;app>/&lt;model>_&lt;viewtype>.html
    success_url = '/'  # 削除後にリダイレクトするURL</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このビューは、既存の<code>Book</code>インスタンスを削除するための確認ページを表示し、その削除を処理します。削除するインスタンスはURLから取得されます。削除が成功した後は<code>success_url</code>で指定したURLにリダイレクトされます。</p>
</div></div>



<p>以上が、Djangoの汎用ビューの基本的な活用方法とその使用方法です。このように、汎用ビューを使用すると、一般的なWeb開発タスクを簡単に行うことができます。</p>



<h2 class="wp-block-heading"><span id="toc10">ビューのテスト</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後に、作成したビューを簡単にテストする方法をご紹介します。</p>
</div></div>



<p>Djangoビューのテストは、アプリケーションの品質を確保するために重要なステップです。テストを行うことで、ビューが期待通りに動作することを確認し、エラーやバグを早期に発見することが可能に。</p>



<p>Djangoはビューのテストを支援するための強力なツールを提供しており、それは<strong><span class="marker-under"><code>django.test</code>モジュールの<code>TestCase</code>クラス</span></strong>という形で用意されています。</p>



<p>我々はこのクラスをうまく使用することで、簡単にビューのテストを行うことができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下に、ビューのテストの基本的な手順を示します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc11">ステップ1：テストケースの作成</span></h3>



<p>まず、<code>django.test.TestCase</code>を継承したクラスを作成します。このクラス内にテストメソッドを定義します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from django.test import TestCase

class MyViewTest(TestCase):
    ...</pre>



<h3 class="wp-block-heading"><span id="toc12">ステップ2：テストメソッドの定義</span></h3>



<p>次に、テストケースクラス内にテストメソッドを定義します。テストメソッドの<strong>名前は<code>test_</code>で始まる必要があります。</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def test_my_view(self):
    ...</pre>



<h3 class="wp-block-heading"><span id="toc13">ステップ3：ビューのテスト</span></h3>



<p>最後に、<code>TestCase</code>クラスの<code>client</code>属性を使用して、ビューにリクエストを送信し、レスポンスを検証します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">response = self.client.get('/my-view-url/')
self.assertEqual(response.status_code, 200)</pre>



<p>このコードは、<code>/my-view-url/</code>にGETリクエストを送信し、レスポンスのステータスコードが200（成功）であることを確認しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以上が、Djangoのビューのテストの基本的な手順です。このように、Djangoのテストフレームワークを使用すると、ビューのテストを簡単に行うことができます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc14">Django：ビュー（views.py）のまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<ol class="wp-block-list">
<li><strong>ビューの基本</strong>: Djangoのビューは、ユーザーからのリクエストを受け取り、レスポンスを生成する役割を果たします。ビューは関数またはクラスとして定義されます。</li>



<li><strong>関数ベースビュー</strong>: 関数ベースビューは、シンプルで直感的なビューの作成方法です。一つの関数が一つのビューを表します。</li>



<li><strong>クラスベースビュー</strong>: クラスベースビューは、より複雑なビューの作成やコードの再利用を可能にします。ビューの振る舞いをカスタマイズするために、クラスの継承やミックスインを利用できます。</li>



<li><strong>汎用ビュー</strong>: Djangoは、一般的なウェブ開発タスクを簡単に行うための汎用ビューを提供しています。これらは、リストビュー、ディティールビュー、フォームビューなど、特定の用途に最適化されたクラスベースビューです。</li>



<li><strong>ビューのテスト</strong>: Djangoのテストフレームワークを使用して、ビューの動作を確認するテストを作成できます。これにより、コードの品質を保証し、バグを早期に発見できます。</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>初めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】for文の使い方とコツを３分でわかりやすく解説</title>
		<link>https://it-biz.online/python/for-range/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=3759</guid>

					<description><![CDATA[Pythonのfor文は、指定された操作をリストや文字列などのデータの各要素に対して繰り返し実行するための構文です。 参考　Pythonとは？（特徴とできること） このページではPython初心者の方向けに、for文の使 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Pythonの<strong><code>for</code>文</strong>は、<strong><span class="marker-under">指定された操作をリストや文字列などのデータの各要素に対して繰り返し実行</span></strong>するための構文です。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/python-abc/">Pythonとは？（特徴とできること）</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>for文をうまく利用することで、一連の同じ操作を効率よく行うことができます。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">numbers = [1, 2, 3, 4, 5]  # 数字のリストを作成

for num in numbers:  # リストnumbersの各要素に対して以下の処理を行う
    print(num)  # numを表示

# 実行結果：
# 1
# 2
# 3
# 4
# 5</pre>



<p>このページではPython初心者の方向けに、<strong>for文</strong>の使い方を１からわかりやすくサンプルコード付きで解説します。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>【前提】繰り返し処理とは？</li>



<li>for文の使い方</li>



<li>for文を利用する際の注意点</li>
</ul>
</div>
</div></div>



<p>Pythonエンジニアを目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>です。是非最後までご覧ください</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/rule/">Pythonの基本的な書き方・構文ルール</a></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">前提：繰り返し処理とは？</a><ol><li><a href="#toc2" tabindex="0">カウント制御ループ（for文で実現）</a></li><li><a href="#toc3" tabindex="0">条件制御ループ（while文で実現）</a></li></ol></li><li><a href="#toc4" tabindex="0">Python：for文</a></li><li><a href="#toc5" tabindex="0">Python：for文の注意点</a><ol><li><a href="#toc6" tabindex="0">Python：for文　注意点①：繰り返し処理中のシーケンスの変更</a></li><li><a href="#toc7" tabindex="0">Python：for文　注意点②：変数のスコープ</a></li><li><a href="#toc8" tabindex="0">Python：for文　注意点③：breakとcontinueの使用</a></li><li><a href="#toc9" tabindex="0">Python：for文　注意点④：無限ループの回避</a></li></ol></li><li><a href="#toc10" tabindex="0">Python：for文のまとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">前提：繰り返し処理とは？</span></h2>



<p>「繰り返し実行」とは、<strong>特定のプログラムのコードブロック（つまり、命令の集まり）を何度も実行することを指します。</strong>この概念は<a href="https://it-biz.online/lifehack/programming-abc/">プログラミング</a>の基本的な要素の1つで、特定のタスクを指定した回数だけ、または特定の条件が満たされるまで実行するために使用されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>繰り返し実行は主に2つの形式で現れます：「カウント制御ループ」と「条件制御ループ」です。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">カウント制御ループ（for文で実現）</span></h3>



<p>カウント制御ループは「指定された回数だけ何かを行う」というタスクに対応します。</p>



<p>例えば、「5回"こんにちは"と言ってください」と言われた場合、それを実行するには、"こんにちは"と言う行為を5回繰り返す必要があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Pythonの<code>for</code>文を使ったプログラムでは、以下のように表現します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">for i in range(5):
    print("こんにちは")

# 実行結果：
# こんにちは
# こんにちは
# こんにちは
# こんにちは
# こんにちは</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/print/">print関数の使い方</a></p>



<p>このコードでは、"こんにちは"という文字列を5回表示します。<code>range(5)</code>は0から4までの数値を生成するので、<code>for</code>文はこの5回分の数字（つまり5回）を使ってループ（繰り返し）を作ります。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>for文の使い方については後ほど詳しく解説します。</p>
</div>



<h3 class="wp-block-heading"><span id="toc3">条件制御ループ（while文で実現）</span></h3>



<p>条件制御ループは、<strong>特定の条件が満たされるまで何かを行う</strong>というタスクに対応します。</p>



<p>例えば、「お腹が空くまでリンゴを食べ続けてください」と言われた場合、お腹が空くという条件が満たされるまでリンゴを食べ続ける必要があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Pythonの<code>while</code>文を使ったプログラムでは、以下のように表現します。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">stomach = 0  # お腹の状態を0とする（0は空腹を、10は満腹を表すとします）

while stomach &lt; 10:  # お腹がまだ満腹でない場合
    print("リンゴを食べる")
    stomach += 1  # リンゴを1個食べるとお腹の状態を1だけ増やす</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/while-2/">while文の使い方</a> / <a href="https://it-biz.online/python/assignment-operator/">代入演算子（+=）</a></p>



<p>このコードでは、お腹が満腹になるまで（つまり<code>stomach</code>が10になるまで）"リンゴを食べる"と表示し続けます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これらのループは、特定のタスクを指定した回数だけ実行するか、特定の条件が満たされるまで続けるかといった繰り返しの操作をコード化するための非常に重要なツールです。</p>
</div></div>



<p>前提をしっかり押さえたところで、カウント制御ループであるfor文の使い方について詳しく見ていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc4">Python：for文</span></h2>



<p>Pythonの<code>for</code>文は、<strong>指定された操作</strong>をリストや文字列などのデータの各要素に対して<strong>繰り返し実行</strong>するための構文です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>構文ルールは以下の通り。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">for 変数 in シーケンス:
    # シーケンスの各要素（変数）を使った処理</pre>



<p>ここで「シーケンス」はリストや文字列などの反復可能なデータを指し、「変数」はそのシーケンスの各要素を一つずつ受け取るためのものです。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/data-2/">リストとは？</a> / <a href="https://it-biz.online/python/variable-python/">変数とは？</a></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>文字だけでは分からない部分もあると思うので、早速サンプルコードを見ていきましょう。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">numbers = [1, 2, 3, 4, 5]  # 数字のリストを作成

for num in numbers:  # リストnumbersの各要素に対して以下の処理を行う
    print(num)  # numを表示

# 実行結果：
# 1
# 2
# 3
# 4
# 5</pre>



<p>このプログラムは1から5までの各数字を順番に表示します。リスト<code>numbers</code>の各要素が一つずつ<code>num</code>に代入され、その<code>num</code>を使って<code>print(num)</code>という処理が行われます。結果、1~5の数字が出力されるという仕組み。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>わかりやすく言うと「for文は<strong><span class="marker-under">指定したオブジェクトから要素を順番に取得し、その要素の数だけ処理を繰り返す</span></strong>」処理を行うということ。</p>
</div></div>



<p>リストだけでなく、他の集合・辞書・タプル、さらには文字列に対してもfor文を利用することが可能です。</p>



<p class="has-text-align-center"><span class="badge-blue">サンプル</span>　<strong>文字列に対するforループ</strong></p>



<p>文字列は文字のシーケンスとみなすことができます。したがって、<code>for</code>ループを使って文字列の各文字を順に処理することができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">word = "Hello, World!"

for letter in word:
    print(letter)
# 実行結果：
# H
# e
# l
# l
# o
# ,
#  
# W
# o
# r
# l
# d
# !</pre>



<p class="has-text-align-center"><span class="badge-blue">サンプル</span>　<strong>辞書に対するforループ</strong></p>



<p><a href="https://it-biz.online/python/python-dictionary/">辞書</a>はキーと値のペアの集合です。<code>for</code>ループを使うと、辞書のキーまたは値、または両方に対して処理を行うことができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">my_dict = {"apple": "red", "banana": "yellow", "grape": "purple"}

for key in my_dict:
    print(key)

# 実行結果：
# apple
# banana
# grape

for value in my_dict.values():
    print(value)

# 実行結果：
# red
# yellow
# purple

for key, value in my_dict.items():
    print(f"The {key} is {value}")

# 実行結果：
# The apple is red
# The banana is yellow
# The grape is purple</pre>



<p class="has-text-align-center"><span class="badge-blue">サンプル</span>　<strong>タプルに対するforループ</strong></p>



<p><a href="https://it-biz.online/python/python-tuple/">タプル</a>もリストと同じように要素のシーケンスですが、タプルの要素は変更できません。タプルに対する<code>for</code>ループの使い方はリストと同じです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">my_tuple = ("apple", "banana", "grape")

for item in my_tuple:
    print(item)

# 実行結果：
# apple
# banana
# grape</pre>



<p class="has-text-align-center"><span class="badge-blue">サンプル</span>　<strong>セットに対するforループ</strong></p>



<p><a href="https://it-biz.online/python/python-set/">セット（集合）</a>は重複する要素を含まないアイテムの集合です。セットに対する<code>for</code>ループの使い方もリストやタプルと同じです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">my_set = {"apple", "banana", "grape", "apple"}

for item in my_set:
    print(item)
# 実行結果（セットの順序は保証されない）：
# apple
# banana
# grape</pre>



<p>以上のように、<code>for</code>ループはPythonの様々なデータ構造に対して利用することができ、それぞれの要素に対して同じ操作を繰り返すために非常に便利です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>リストやタプルといった基本知識に不安がある方はこの機会に以下のページで復習しておきましょう！</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-ビズドットオンライン wp-block-embed-ビズドットオンライン"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/python/data-2/" title="【Python】データ構造（リスト・タプル・辞書・集合）の基本を３分でわかりやすく解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2020/02/python-data-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2020/02/python-data-320x180.png 320w, https://it-biz.online/wp-content/uploads/2020/02/python-data-240x135.png 240w, https://it-biz.online/wp-content/uploads/2020/02/python-data-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Python】データ構造（リスト・タプル・辞書・集合）の基本を３分でわかりやすく解説</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】Pythonの４つのデータ構造を初心者向けに整理しています。リスト・タプル・辞書・集合のデータ構造の違いを説明できるでしょうか？このページでは、実際のPythonのサンプルコードを用いてそれぞれの違いを丁寧に解説しています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.06.28</div></div></div></div></a>
</div></figure>
</div></div>



<h2 class="wp-block-heading"><span id="toc5">Python：for文の注意点</span></h2>



<p>for文は使いこなせると便利な構文でもありますが、いくつか注意点も存在します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後に、for文を利用する際の注意点についてご説明します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">Python：for文　注意点①：繰り返し処理中のシーケンスの変更</span></h3>



<p><code>for</code>ループ中にシーケンス（リストやタプル、文字列など）を変更すると、結果が予測しきれなくなる可能性があります。これはループが要素をどの順番で処理するかが変わってしまうためです。</p>



<p>繰り返し処理の中でシーケンスを変更する必要がある場合は、通常、シーケンスのコピーを作ってからループを行います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># NGな例 - 繰り返し処理中にシーケンスを変更する
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num == 3:
        numbers.remove(num)
print(numbers)  # 結果は予期しないものになるかもしれません

# OKな例 - 繰り返し処理のためにシーケンスのコピーを作成する
numbers = [1, 2, 3, 4, 5]
for num in numbers.copy():
    if num == 3:
        numbers.remove(num)
print(numbers)  # 予期した結果が得られます</pre>



<h3 class="wp-block-heading"><span id="toc7">Python：for文　注意点②：変数のスコープ</span></h3>



<p><code>for</code>ループ内で宣言された変数は、ループの外でも使用することが可能。<strong>しかし、一般的にはループの外でループ内部の変数を使用するのは避けた方が良い</strong>です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ループ内部で生成された変数の値はループが終了した時点での最後の値となるため、プログラムが複雑になると予期しない結果を生じる可能性があります。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">for i in range(5):
    temp = i * 2
print(temp)  # この時点でtempは最後のループの値、つまり8になる</pre>



<h3 class="wp-block-heading"><span id="toc8">Python：for文　注意点③：breakとcontinueの使用</span></h3>



<p><code><a href="https://it-biz.online/python/break/">break</a></code>はループを完全に終了させ、<code><a href="https://it-biz.online/python/continue/">continue</a></code>は現在のループをスキップして次のループに進むための命令です。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/python/continue-break/">breakとcontinueの違い</a></p>



<p>これらは制御フローをより細かく制御するのに便利ですが、使いすぎるとプログラムが複雑になり、読みにくくなる可能性があるため、注意して使用する必要があります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">for i in range(5):
    if i == 2:
        continue  # iが2のときのみ処理をスキップ
    print(i)
# 実行結果：
# 0
# 1
# 3
# 4</pre>



<h3 class="wp-block-heading"><span id="toc9">Python：for文　注意点④：無限ループの回避</span></h3>



<p>理論的には<code>for</code>ループでは無限ループは発生しませんが、例えばリスト内包表記でリストを生成しながらそのリストをループするような場合などは注意が必要です。</p>



<p>無限ループが発生するとプログラムは止まらず、コンピュータのリソースを過剰に消費する可能性があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これらを意識しながら<code>for</code>ループを使用すると、より効果的かつ安全にコードを書くことができます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc10">Python：for文のまとめ</span></h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title">Python：for文のまとめ</div>
<ul class="wp-block-list">
<li><strong>基本</strong>：Pythonの<code>for</code>文は、指定したシーケンス（リスト、タプル、文字列など）やイテラブル（反復可能なオブジェクト）の各要素に対して繰り返し処理を行うために使用されます。</li>



<li><strong>構文ルール</strong>：
<ol class="wp-block-list">
<li><code>for &lt;変数&gt; in &lt;シーケンス&gt;:</code></li>



<li><code>for</code>の後には変数名が来ます。この変数には、シーケンスの各要素が一つずつ代入されます。</li>



<li><code>in</code>の後には繰り返し処理を行いたいシーケンスやイテラブルを指定します。</li>



<li><code>:</code>の後には繰り返し実行したいコードブロック（インデントされた部分）を記述します。</li>
</ol>
</li>



<li><strong>注意点</strong>：
<ul class="wp-block-list">
<li><code>for</code>ループ中にシーケンスを変更しない。必要な場合はシーケンスのコピーを作ってからループを行う。</li>



<li>ループ内で宣言された変数はループの外でも使用できるが、基本的にはループの外で使わない。</li>



<li><code>break</code>や<code>continue</code>は制御フローを細かく制御するのに便利だが、使いすぎるとコードが読みにくくなるので注意する。</li>



<li>無限ループを避ける。例えば、リスト内包表記でリストを生成しながらそのリストをループするといった場合には特に注意が必要。</li>
</ul>
</li>
</ul>
</div>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># 最初の2つの数
num1, num2 = 0, 1
# 数列を表示するためのリスト
fibonacci_sequence = [num1, num2]

# 次の8つの数を生成
for _ in range(8):
    num1, num2 = num2, num1 + num2
    fibonacci_sequence.append(num2)

# 数列を表示
for number in fibonacci_sequence:
    print(number)</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このコードを実行すると、最初の10個のFibonacci数（0, 1, 1, 2, 3, 5, 8, 13, 21, 34）が表示されます。</p>
</div></div>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>始めてPythonを勉強するのは結構難しいですよね。</p>



<p>でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。</p>
</div></div>



<p>Pythonをはじめとするプログラミングスキルを武器に、<strong><span class="marker-under">時間と場所に捉われない自由な生き方</span></strong>を目指してみませんか？今すぐ行動したい方は以下の記事をチェック！</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://it-biz.online/lifehack/programming/" class="btn btn-m btn-circle btn-shine has-text-color has-background has-cocoon-black-color has-orange-background-color" target="_self">【無料】プログラミングスクールの探し方 ></a></div>



<p class="has-text-align-center"><span class="badge-green">読者料典</span>　<a href="https://it-biz.online/python/python-roadmap/">Python入門：学習カリキュラム</a>　←こちらから！</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
