Python Djangoを使ってみる（自分用）

現時点で明確に作りたいwebアプリがあるわけではないが、フレームワークを使い方がわからないと何が作れるかもよくわからない。
とりあえず使い方を理解しながら、概念的なものをインプットし、簡単なアウトプットをしていきたい。

目次
<strong>1.フレームワークとは
2.なぜ使うのか
3.よく使われるWebフレームワーク（GPT調べ）
4.Djangoを使ってみる
5.ディレクトリ構造
6.アプリケーション作成
7.開発用サーバーの起動

1.フレームワークとは
-
Web開発におけるフレームワークとは、ウェブサイトやウェブアプリケーションを効率的に開発するために、事前に用意されたコードやツール。
とりあえず「設計図」と「部品」が揃った便利なものと理解しておく。

フレームワークの役割
Webサイトやアプリをゼロから作るのはとても大変です。HTML, CSS, JavaScriptの他にも、データベースとの連携やユーザー管理など、必要なことがたくさんあります。これらをすべて一から自分で作るのは、まるで木材を切り出して釘やハンマーも自作して家を建てるようなもの。
フレームワークを使えば、よく使う「部品」（機能やコード）がすでに揃っているので、それらを組み合わせたり、カスタマイズしたりするだけで、効率的に開発を進めることができます。たとえば、ユーザーの登録やログイン機能、フォームの送信機能、データベース操作など、よく使われる機能を簡単に実装できる。

2.なぜ使うのか？
-
時間の節約: よく使う機能が最初から用意されているため、ゼロから作るよりも早く開発が可能。
セキュリティ: フレームワークは一般的に、セキュリティの面でも配慮されている。
保守性: フレームワークを使うと、コードが整理されやすく、後の保守が容易。

3.よく使われるWebフレームワーク（GPT調べ）
-
<strong>Django (Python): </strong>データベースとの連携が得意で、素早くウェブアプリを開発できます。安全性も高いです。
<strong>Flask (Python): </strong>シンプルで軽量なフレームワーク。小規模なアプリや、Djangoよりも自由度が高い開発に向いています。
<strong>streamlit (Pyrhon):</strong> データサイエンスやデータビジュアライゼーションのために作られた、シンプルで、Pythonのコードを書く感覚で、インタラクティブなウェブアプリをすぐに作成可能。
<strong>Ruby on Rails (Ruby): </strong>簡単に強力なアプリを作れるRubyのフレームワーク。スタートアップでよく使われています。
<storng>Laravel (PHP): </strong>PHPで人気のフレームワークで、初心者にも優しく、様々な機能がすぐに使えます。
<strong>Express (Node.js): </strong>JavaScriptを使ったサーバーサイドフレームワーク。シンプルで非常に高速な開発が可能です。

例えば、Djangoを使うと、家（アプリ）を建てる時に壁や屋根、窓などのパーツが既に揃っていて、それらを組み立てていくだけで、すぐに住める家ができます。もし、Djangoを使わないでゼロから家を建てる場合、木材を伐採して、工具を自作して、壁や屋根も全て手作りしなければならないので、非常に時間がかかります。・・・なるほど

例えるとすれば、こんな感じ？
<strong>フレームワークなし：林業、建築士、大工など全てを自分で多能工として作る
フレームワークあり：ハウスメーカー</strong>

自分なりにこのように理解したが、意義異論は認める。

4.Djangoを使ってみる
-
Pythonでは、DjangoかFlaskがよく使われているらしく、使い方について書いてある記事も多い。
とりあえずDjangoなら何でもできそうなので、使ってみることにする。

<strong>手順1. Djangoをインストールする</strong>
```
# Djangoをインストール
pip install django
```

<strong>手順2. Djangoプロジェクトを作る</strong>
```
# Djangoのバージョンを確認
python -m django --version

# Djangoプロジェクトを作成する 
# 任意のプロジェクト名（ここではmyproject）
django-admin startproject myproject
```
5.ディレクトリ構造
-
生成されたディレクトリ構造を確認する
Djangoで新しいプロジェクトを作成すると、以下のようなディレクトリ構造が生成される
```
# 生成されたディレクトリ構造

myproject/
│
├── manage.py
├── myproject/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── asgi.py
│   └── wsgi.py
└── db.sqlite3 (データベースファイル、初期状態ではまだ作成されていない)
```
<strong>各ファイル・ディレクトリの役割</strong>

<strong>manage.py（プロジェクトの根幹となるスクリプトファイル）</strong>
Djangoプロジェクト全体を管理するスクリプトです。このファイルを使って、サーバーの起動、マイグレーションの実行、アプリの作成などを行います。たとえば、開発用サーバーを起動するには次のコマンドを実行します。
```
# 開発用サーバーの起動
python manage.py runserver
```
<strong>myproject/ (プロジェクトのメインディレクトリ)</strong>
プロジェクトの設定やルーティングに関連するファイルが含まれています。このディレクトリ名は、作成したプロジェクト名と一致します。
ディレクトリ構造を見ても直感的にはよくわからないので、<a href"https://qiita.com/pythonista/items/19613663ef7bb3c57d4f">こちらの図解を参照。</a>

<strong>__init__.py (基本的に触らない) </strong>
Pythonにこのディレクトリがパッケージであることを知らせる空のファイル。基本的には何も書かれていない。

<strong>settings.py（VScodeのsetting.jsonみたいなもの？）</strong>
プロジェクト全体の設定ファイルです。データベース設定、デバッグモード、インストールされているアプリケーション、テンプレートエンジンの設定などが記載されている。

<strong>urls.py（URLと処理を紐付けするファイル）</strong>
URLルーティングの設定ファイルです。各URLに対してどのビュー（機能）を呼び出すかを定義します。プロジェクト全体のルート設定がここに書かれますが、アプリごとに個別の urls.py を持つことが一般的。

<strong>asgi.py</strong>
ASGI (Asynchronous Server Gateway Interface) 用のエントリーポイントです。DjangoをASGI対応サーバーで実行するための設定が含まれている。
よくわからん。

<strong>wsgi.py</strong>
WSGI (Web Server Gateway Interface) 用のエントリーポイントです。DjangoをWSGI対応サーバー（たとえば、GunicornやuWSGI）で実行するための設定が含まれています。
よくわからん。

<strong>db.sqlite3 (まだ作成されていない場合もあり)</strong>
Djangoのデフォルト設定では、SQLiteという軽量なデータベースが使われます。このファイルは初期状態では存在しませんが、python manage.py migrate コマンドを実行すると、プロジェクトのデータベースとして db.sqlite3 が作成されます。

6.アプリケーション作成
-
Djangoにおけるアプリケーションとは、いわゆるデスクトップアプリとかwebアプリとは少し解釈を変える必要がある。
ここでは一旦、<strong>アプリケーション = 機能をまとめた箱</strong> と定義しておく。


<strong>手順1.プロジェクトに新しいアプリケーション（機能）を追加</strong>
```
アプリケーションを追加する
'django-admin startapp myapp'

作成したアプリケーションのディレクトリへ移動
cd myapp
```
<strong>手順2.作成したアプリケーション（機能）をプロジェクトに追加</strong>

作成したアプリケーション myapp をプロジェクトに追加するため、myproject/settings.py を開き、INSTALLED_APPS に myapp を追加する。
```python:myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',  # 管理サイト
    'django.contrib.auth',   # 認証システム
    'django.contrib.contenttypes', # コンテンツタイプフレームワーク
    'django.contrib.sessions', # セッションフレームワーク
    'django.contrib.messages', # メッセージフレームワーク
    'django.contrib.staticfiles', # 静的ファイルの管理フレームワーク
    'myapp',  # ここにアプリを追加
]
```

<strong>手順3. ビューを作成する（処理の定義）</strong>
myapp/views.py ファイルを開き、シンプルなビューを作成します。
ビューはという概念がよくわからないので、<strong>処理の定義</strong>と覚える。
```python:myapp/views.py
from django.http import HttpResponse

def welcome_view(request):
    return HttpResponse("ようこそ")
```

<strong>手順4. ルーティング設定（URLと処理の紐付け）</strong>
myproject/urls.py を編集して、welcome_view を表示できるようにURLを設定する。
```python:myproject/urls.py
from django.contrib import admin
from django.urls import path
from myapp.views import welcome_view  # ビューをインポート

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', welcome_view),  # ルートURLでようこそを表示
]
```
6.開発用サーバーを起動
-
開発用サーバーを起動し、<a href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a> アクセスする。
```
python manage.py runserver
```
画面に「<strong>ようこそ</strong>」と表示されたらOK！