Djangoを0から学習してみた

投稿日:2024-08-01

Djangoを0から学習してみた

PythonDjango4 超入門を読みながら作成しています。

書籍リンクはこちら→リンク(https://www.shuwasystem.co.jp/book/9784798062419.html)

環境

  • Win10
  • VScode
  • Python3.12.4(venv)
  • モジュールのバージョンに関しては書籍と同じです。(requirement.txt)

1章 djangoの始め方

pip install Django==4.2.2を実行した後、

django-admin startproject django_appと打つことで、プロジェクトのフォルダを作成します。

ファイル名

機能

initi.py

Djangoの初期化処理

asgi.py

ASGIという非同期Webアプリケーションのためのプログラム

settings.py

プロジェクトの設定情報

urls.py

プロジェクトのURLを管理するファイル

wsgi.py

WSGIというWebアプリケーションのプログラム

pythonでdjango_appフォルダ内でpython manage.py runserverを実行する

2章 ビューとテンプレート

新しいアプリケーションを作るにはpython manage.py startapp "アプリ名" で作成します。
作成したアプリケーションのフォルダ内はこのようになっています。

ファイル名

機能

「migrations」フォルダ

マイグレーションといって、データベース関係の機能のファイルがまとめられます

initi.py

アプリケーションの初期化処理

admin.py

管理者ツール

apps.py

アプリケーション本体の処理をまとめる

models.py

モデルに関する処理を記述するもの

tests.py

プログラムのテスト

views.py

画面表示

views.pyを編集したけど、表示ができない...!

新しく作成したアプリケーション(hoge)内のviews.pyで下記のようなコードを書いただけではhost:8000/hogeにアクセスしても表示することは出来ません。

def index(request):
  return HttpResponse("Hello")

hoge/urls.pyを書き換える事で表示部分を作成します。
views.pyではindexページの定義だけを行っており、urls.pyで定義された物を呼び出せるようにするイメージですね...!
urls.pyは下記のように定義します。

#hoge/urls.py(新規作成)
from django import urls
from . import views

urlpatterns = [
    urls.path('', views.index, name='index'),
]
#プロジェクトフォルダ/urls.py
from django.contrib import admin
from django.urls import path,include

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

プロジェクトフォルダのurls.pyでinclude('hoge.urls')を追加することによってhogeフォルダのurls.pyが読み込まれるようになります。
とっても分かりやすい...?

Memo

  • urlpatternsを修正することでhoge/?id=1?nickname=taroではなくhoge/id/nicknameのようなクエリパラメータを作れる。(P70)

テンプレートの使い方

テンプレートを使うことでhtmlでの表示+pythonの処理のようなページが作れるようになります。テンプレートを利用するには最初にアプリケーションの登録を行う必要があります。
方法としてはプロジェクトフォルダのsettings.pyのINSTALLED_APPS変数に作成したアプリケーション名を追加するだけですね。

INSTALLED_APPS = [
    'hoge', # Add this line to the list of installed apps
]

テンプレートの作成

アプリケーションのフォルダーに新しくtemplatesフォルダを作成します。そして、templatesフォルダの中にアプリケーション名のフォルダを作成します(ちょっとややこしいですね(笑))。
templatesフォルダ内のアプリケーション名フォルダ内にindex.htmlを作成し、自由に記述します。

urlpatternsの修正

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

/アプリケーション名/を開いた際にviews.pyのindex関数が呼び出されます

views.pyの修正

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return render(request, 'hoge/index.html')

index関数の中でrender関数を使うことでテンプレート内のindex.htmlを表示できます

{% %}はテンプレートタグ

Pythonのコード等を記述して表示を変えたい場合は{% %}を用いる必要があります。

ビュー関数のクラス化

class Helloview(TemplateView):
    def __init__(self):
#初期化
    def get(self, request):
#処理を書く
    def post(self, request):
#処理を書く
       return

ビュー関数をクラス化する事によってrequestがgetの時とpostの時の動作を一括で管理できるようになります。基本的にviewはこのようにしていくのかな...?