【初心者向け】Djangoでアプリ作成【Python】

Djangoとは？
---
DjangoはPythonで書かれた高水準なWebフレームワークで、迅速な開発とクリーンで実用的なデザインを特徴としています。

インストール
---
``` .Djangoプロジェクトの作成
pip install django
```

``` .アプリケーションの作成
cd myblog
python manage.py startapp blog
```

アプリケーションの設定
---
myblog/settings.pyを開き、INSTALLED_APPSリストにblogを追加します。
```
INSTALLED_APPS = [
    ...
    'blog',
]
```

モデルの作成
---
blog/models.pyに、ブログ記事を表すPostモデルを定義します。

```
from django.db import models
from django.utils import timezone

class Post(models.Model):
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
```

マイグレーションの作成と適用
---
モデルをデータベースに反映させるためにマイグレーションを作成し、適用します。
```
python manage.py makemigrations
python manage.py migrate
```

管理画面の設定
---
```
from django.contrib import admin
from .models import Post

admin.site.register(Post)
```

ビューとテンプレートの作成
---
blog/views.pyに、ブログ記事のリストを表示するビューを作成します。
```
from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})
```

blog/templates/blog/post_list.htmlというファイルを作成し、以下のHTMLコードを追加します。
```
<!DOCTYPE html>
<html>
<head>
    <title>Blog</title>
</head>
<body>
    <h1>Blog Posts</h1>
    <ul>
        {% for post in posts %}
            <li>
                <h2>{{ post.title }}</h2>
                <p>{{ post.text }}</p>
                <p><em>Published on {{ post.published_date }}</em></p>
            </li>
        {% endfor %}
    </ul>
</body>
</html>
```

blog/urls.pyを作成し、ビューをURLにマッピングします。
```
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
]
```

myblog/urls.pyにblogのURL設定を含めます。
```
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]
```

サーバーの起動と確認
---
すべての設定が完了したら、開発用サーバーを起動して、ブラウザでアプリケーションを確認します。
```
python manage.py runserver
```

ブラウザで`http://127.0.0.1:8000/`にアクセスすると、ブログ記事が表示されます。

``` .フォルダ構成
myblog/
├── blog/
│   ├── migrations/
│   │   └── __init__.py
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── myblog/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── blog/
    └── templates/
        └── blog/
            └── post_list.html
```
`myblog/`：プロジェクトのルートディレクトリ
`blog/`：アプリケーションディレクトリ
`migrations/`：データベースマイグレーションファイルを含むディレクトリ
`__init__.py`：このディレクトリがPythonパッケージであることを示すファイル
`admin.py`：Django管理画面にモデルを登録するためのファイル
`apps.py`：アプリケーション設定を含むファイル
`models.py`：データベースモデルを定義するファイル
`tests.py`：アプリケーションのテストを書くためのファイル
`urls.py`：アプリケーションのURLルーティングを定義するファイル
`views.py`：ビュー関数を定義するファイル
`myblog/`：プロジェクト設定ディレクトリ
`__init__.py`：このディレクトリがPythonパッケージであることを示すファイル
`asgi.py`：ASGI設定ファイル（非同期サーバーゲートウェイインターフェース）
`settings.py`：プロジェクトの設定ファイル
`urls.py`：プロジェクトのURLルーティングを定義するファイル
`wsgi.py`：WSGI設定ファイル（Webサーバーゲートウェイインターフェース）
`manage.py`：Django管理コマンドを実行するためのスクリプト
`blog/templates/blog/post_list.html`：ブログアプリのテンプレートファイル

まとめ
---
DjangoはPythonで作られた高水準なWebフレームワークで、迅速な開発を支援します。
インストール後、プロジェクトとアプリを作成し、モデルやビューを定義してデータベースと連携させます。
アプリケーションの設定やテンプレート作成後、サーバーを起動して動作を確認できます。