2023年9月27日


 Djangoのアプリ制作メモ

  1. Python Django
  2. Code( github )

👀 選択 してください

Djangoをインストールする前にまえに望ましい準備         

1 Pythonがインストールされている

2仮想環境(Virtualenv)が準備されている

3 pipがインストールされている  

 pip3 --version
Pythonのバージョンとともに、"pip3"のバージョンが表示されます

仮想環境

 cd ~/Documents
sudo pip install virtualenv を実行したいディレクトリ(フォルダ)に移動します。例えば、ドキュメントに移動する場合、上のように入力します: mkdir (アプリ開発用のフォルダ名) フォルダー作成し

 sudo pip3 install virtualenv (pip3 install virtualenv)
指定したディレクトリ内で virtualenv パッケージをインストールすることができます。ただし、sudo コマンドは慎重に使用する必要があります。誤った操作によりシステムに影響を与える可能性があるため、注意が必要です。   

virtualenv -p python3 venv  (virtualenv myenv )
仮想環境作成するためのコマンドです。(myenvは仮想環境の名前で、必要に応じて変更できます。)

virtualenv --version      確認

無ければ 代替手法のいくつかです: 

python3 -m venv venv
こちらを実行してみた。python3 -m venv の方が追加のパッケージインストールが不要で便利です。

- Python venvモジュール (Python 3以降): Python 3以降には、Python標準の venv モジュールが含まれています。これを使用して仮想環境を作成できます。Virtualenvとほぼ同様の機能を提供します。

こちらがコマンドの詳細な説明です:
virtualenv: 仮想環境を作成するためのコマンドです。virtualenv コマンドを使用すると、新しいPython環境を作成して、プロジェクトごとに必要なライブラリを管理できます。
-p python3: このオプションは、作成する仮想環境で使用するPythonのバージョンを指定します。ここでは、Python 3を使用することを指定しています。
venv: これは仮想環境の名前です。venv は任意の名前で置き換えることができます。指定した名前のフォルダ(ディレクトリ)が作成され、その中に仮想環境が作成されます。 このコマンドを実行すると、指定されたPythonバージョンで新しい仮想環境が作成されます。この仮想環境内でPythonのパッケージやライブラリをインストールすると、他のPython環境に影響を与えることなく、プロジェクトごとに必要な環境を独立して構築できます。

-------------
    virtualenv -p python3 venv と virtualenv myenv は同じではありません。これらは仮想環境を異なる方法で作成するコマンドです。
    
    virtualenv -p python3 venv: このコマンドは、Python 3を指定して名前が "venv" の仮想環境を作成するものです。 -p オプションは、使用したいPythonバージョンを指定するために使います。この場合、Python 3が仮想環境のデフォルトのPythonバージョンとして設定されます。
    
    virtualenv myenv: このコマンドは、名前が "myenv" の仮想環境を作成するものです。Pythonのバージョンを指定しない場合、システムに既にインストールされているPythonのバージョンが使用されます。
    -------------

仮想環境の起動

source venv/bin/activate
仮想環境を起動する

pip3 install Django
仮想環境を構築、起動後に、Djangoをインストールしていきます。

Successfully installed Django-....
ターミナルに表示されれば、成功です。

バージョン情報とインストール確認

バージョン情報も含めて確認したい場合は下記の通り進めます。

python3
ターミナルでPythonシェルを立ち上げます。


  >>> import django
  >>> django.__version__
  '4.0'
  
Pythonシェル内で?Djangoライブラリのインポート?バージョン情報を取得します。

deactivate
終了は簡単

pip freez

pip3 freeze
【インストール済みモジュールの記録】

環境の保存

【 pip3 freeze > requirements.txt と pip3 install -r requirements.txt は、Pythonプロジェクトの依存関係を管理し、プロジェクトの環境を再現するために使用される2つの関連するコマンドです。】

pip3 freeze > requirements.txt
このコマンドは、現在のPython環境でインストールされているパッケージとそのバージョン情報を取得し、それを指定したファイル(通常は requirements.txt)に保存します。これは主にプロジェクトの依存関係を文書化し、他の環境で同じパッケージをインストールするために使用されます。

具体的なステップは次の通りです: pip3 freeze: 現在のPython環境でインストールされているすべてのパッケージとバージョンを一覧表示します。 > requirements.txt: リダイレクト演算子 (>) を使用して、pip3 freeze の出力を requirements.txt ファイルに書き込みます。このファイルには、インストールする必要があるパッケージの一覧が含まれます。

pip3 install -r requirements.txt:
このコマンドは、指定されたファイル(通常は requirements.txt)に記載されているパッケージとバージョン情報を読み取り、それらのパッケージをインストールします。 これにより、他の環境でプロジェクトの依存関係を再現することができます。

ステップは以下の通りです: pip3 install -r requirements.txt: -r オプションを使用して、ファイルから依存関係を読み取り、指定されたパッケージとバージョンをインストールします。 このコマンドを使用することで、プロジェクトを新しい環境に移動したり、他の人と共有したりする際に、同じ依存関係を持つ環境を再現するのが簡単になります。これにより、開発環境やデプロイ環境の整合性を保つことができます。
プロジェクト始めよう

django-admin startproject (フォルダ名) 作成場所を考慮して

1)プロジェクトを進めていくためのフォルダを作成します。
  .
  ├── requirements.txt
  ├── src #新たに作成
  └── venv
  
2)作成したプロジェクトフォルダ(ここでは「src」)へ移動します。
cd src
3)Djangoプロジェクトを立ち上げます。
django-admin startproject main .
フォルダ名「main」というプロジェクトの中心となるフォルダが作成されること 作成場所を「 . 」(ドット)とすることで、今いるフォルダ内に「main」フォルダが作成されること になります。 フォルダ構成は下記のようになります。
  
  ├── requirements.txt
  ├── src
  │   ├── main #作成されました
  │   │   ├── __init__.py
  │   │   ├── asgi.py
  │   │   ├── settings.py
  │   │   ├── urls.py
  │   │   └── wsgi.py
  │   └── manage.py #作成されました
  └── venv
  
https://itc.tokyo/django/how-to-install-django/ 参考にさせて頂きます
          sudoを使ってvirtualenvをインストールする必要はありませんし、実行することもお勧めしません。
          一般的に、以下のステップでvirtualenvを使用します:
          Python環境を事前にセットアップします。Python 3がすでにインストールされていることを確認しましょう。
          ターミナルで、任意のディレクトリに移動して仮想環境を作成するためのコマンドを実行します。たとえば、次のコマンドは仮想環境を作成します:
             Copy code  :    virtualenv venv
          これにより、現在のディレクトリにvenvという名前の仮想環境が作成されます。
          仮想環境をアクティブにします。以下のコマンドを実行します:
             Copy code  :    source venv/bin/activate
          これにより、仮想環境がアクティブになり、その環境内でPythonパッケージをインストールおよび実行できます。
          仮想環境で必要なPythonパッケージをインストールします。たとえば、pipを使用して必要なパッケージをインストールします:
             Copy code  :    pip install package-name
          作業が完了したら、仮想環境を非アクティブにするには、次のコマンドを実行します:
             Copy code  :    deactivate
          virtualenvをインストールする際にsudoを使用することは、システム全体に影響を及ぼす可能性があるため、一般的に避けるべきです。
          仮想環境はプロジェクトごとに独立しており、ユーザーレベルで管理されるべきです。
  
  
          pip3 freeze > requirements.txtは、
          Pythonプロジェクトで使用されている依存関係(ライブラリやパッケージ)の一覧をファイルに保存するためのコマンドです。
          このコマンドは通常、以下のような場面で実行されます:
  1プロジェクトの開始時:新しいプロジェクトを作成するとき、仮想環境をセットアップし、必要な依存関係をインストールした後に、依存関係をファイルに保存します。これにより、他の人がプロジェクトをクローンして同じ依存関係をセットアップできるようになります。
  2依存関係の変更時:プロジェクトが進行するにつれて、新しいライブラリを追加したり、バージョンを更新したりすることがあります。依存関係を変更したら、pip3 freeze > requirements.txtを実行して、変更内容を反映した新しいrequirements.txtファイルを生成します。
  3チームでの共有時:プロジェクトをチームで共有する場合、requirements.txtファイルを共有し、他の開発者がプロジェクトの依存関係を一貫性を持ってセットアップできるようにします。
  4デプロイ時:Webアプリケーションやサーバーへのデプロイ時に、requirements.txtファイルを使用して本番環境に必要な依存関係をインストールします。
  したがって、pip3 freeze > requirements.txtは、依存関係が変更されるたびに、または新しいプロジェクトを開始する際に実行されることが一般的です。その後、プロジェクトの共有やデプロイなどのシナリオで使用されます。
  
  virtualenv venv と python3 -m venv venv の違いは、仮想環境を作成する方法とバージョンに関連しています。
  
  virtualenv venv:
  virtualenv はサードパーティのツールであり、Pythonの組み込みモジュールではありません。
  システムにはPython 2とPython 3がインストールされている場合、virtualenvはデフォルトでPython 2を使用します。
  そのため、明示的にPython 3を指定しない限り、Python 2の仮想環境が作成される可能性があります。
  python3 -m venv venv:
  python3 -m venv はPython 3の組み込みモジュールで、Python 3.3以降で使用できます。
  この方法はPython 3のバージョンを指定して仮想環境を作成するため、Python 3の環境が確実に作成されます。
  したがって、Python 3を使用している場合、python3 -m venv を推奨します。Python 2を使用している場合でも、virtualenv を使用してPython 2の仮想環境を作成することはできますが、Python 2はサポートが終了しているため、新しいプロジェクトではPython 3を使用することが強くお勧めされます。
  以下は、より良い方法です:
  
  フォルダ(myproject名)を作成するコマンド。
  mkdir myproject
  cd myproject
  仮想環境をプロジェクトフォルダ内に作成します。Python 3.3以降を使用している場合は、以下のコマンドを使用します。
  python3 -m venv venv
  仮想環境をアクティブにします。
  source venv/bin/activate
  これにより、プロジェクトフォルダ内でのみ仮想環境が有効になり、そのプロジェクト専用のPython環境が使用されます。プロジェクトごとに仮想環境を設定することは、Pythonアプリケーションの開発において一般的なベストプラクティスです。
  
Pythonのバージョンを確認する: python3 --version Pythonスクリプトを実行する: python3 your_script.pyプ ここで、your_script.pyは実行したいPythonスクリプトのファイル名です。 対話モードでPythonを起動する: python3 Pythonの対話型シェルが開き、コマンドを入力してPythonコードを実行できます。 終了するには、exit()、Ctrl + D(macOSとLinux)、または Ctrl + Z(Windows)を使用します。 モジュールやパッケージをインストールするために使用することもあります。例えば、pip3コマンドを使用してPythonパッケージをインストールする際に、Python 3.xの場合はpip3を使用します。 Pythonのバージョンが2.xと3.xの両方がインストールされている場合、python3コマンドを使用することでPython 3.xを明示的に実行できます。これにより、Python 2.xとの混乱を避けることができます。通常、新しいプロジェクトではPython 3.xを使用することが推奨されています。

アプリを追加する

プロジェクトのディレクトリに移動

コマンド python3 manage.py startapp myapp

myappという名のアプリを追加する。

フォルダ内にtemplatesフォルダーとurls.pyファイル追加作成します。

下の図ディレクトリの階層の構造を参考に表示するHTMLファイルを追加作成していく。

CSS始めよう(静的ファイルとユーザーメディア)

全体設定の main/settings.py に以下の設定する


STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / "static_local" ]


                      
MEDIA_URL = '/media/'      # メディアファイルにアクセスするためのURL 又は media_local/
                          
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')   # メディアファイルの保存場所 (ファイルシステム上の絶対パス) 又は media_local/

説明

1

STATIC_URLとSTATICFILES_DIRS:

STATIC_URL は、静的ファイル(CSS、JavaScript、画像などを提供する)にアクセスするためのURLを指定します。通常、/static/ と設定されますが、これは任意の値に変更できます。HTMLテンプレート内のリンクの対応は以下の例のように設定させる必要があります。

<link rel="stylesheet" type="text/css" href="{% static 'css/header.css' %}">

STATICFILES_DIRS は、Djangoが静的ファイルを探しに行くディレクトリのリストです。
ここでは static_local ディレクトリを指定しましたが、プロジェクト内に存在する必要があります。ここにcss/header.cssを配置します。

2

STATICで画像を表示HTML内に{% load static %} と <img src="{% static 'pc2022.png' %} " alt="画像">を記載します。

3

MEDIA_URLとMEDIA_ROOT:
MEDIA_URL: これはユーザーがアップロードしたメディアファイル(画像、音声、動画など)にアクセスするためのURLです。通常、'/media/'と設定します。
MEDIA_ROOT: これはサーバー上のファイルシステム上のディレクトリのパスを指定します。ユーザーからのメディアファイルはこのディレクトリに保存されます。 この設定は、ユーザーがアップロードしたファイルに対するものです。

<img src="/media/my_mail_images/queen_huFkEBh.png" alt="Image">

下図はプロジェクトの概要です、全体的にcss反映させるには static_localフォルダにcssとtemplatesフォルダにbase.htmlを作成する。

        src
        ├── main
        │   ├── asgi.py
        │   ├── settings.py
        │   ├── urls.py
        │   └── wsgi.py
        ├── manage.py
        ├── media_local
        ├── myapp
        │   ├── admin.py
        │   ├── apps.py
        │   ├── forms.py
        │   ├── migrations
        │   ├── models.py
        │   ├── static
        │   │   └── css
        │   │       └── index.css
        │   ├── templates
        │   │   ├── base.html
        │   │   ├── index.html
        │   │   ├── myapp
        │   │   │   ├── myapp_list.html
        │   │   │   ├── その他
        │   │   └── registration
        │   │       └── login.html
        │   ├── tests.py
        │   ├── urls.py
        │   └── views.py
        └── static_local
            └── css
                ├── footer.css
                └── header.css

base.html の先頭に {% load static %} を配置しておき、
その後のテンプレートブロック内でCSSファイルなどを読み込みテンプレート全体に反映する。

-- 実際の base.html のコード ------------- 
{% load static %}
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="{% static 'css/header.css' %}">
    <link rel="stylesheet" href="{% static 'css/footer.css' %}">
            <!--  <linklink rel="stylesheet" href="{% static 'css/index.css' %}"> これは反映したいtemplateの中に{% load static %}とともに設定する-->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> 
           <!-- こちらは  bootstrapのcssです    -->
    <link script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"> <link/script>

    <title>{% block title %}タイトル{% endblock %}</title>
 </head>
 <body>
 <!-- 他のコンテンツをここに記述 -->
 </body>
 </html>
------------------------------------------

6 Top Page

Settingsで全体的設定

こちらSettingsでCss設定する

7

View と コンテキスト(Context)

コンテキスト(Context)は、Webアプリケーション開発において、View(ビュー)からTemplate(テンプレート)にデータや情報を渡すための仕組みです。

特に、MVC(Model-View-Controller)アーキテクチャ(建築物・構造)やその派生であるMVT(Model-View-Template)アーキテクチャを採用するフレームワーク(例:DjangoやRuby on Rails)で一般的に使用されます。

説明

Webアプリケーションの構成要素
ViewからTemplateへの情報伝達
コンテキストとは
Viewでのコンテキストの設定:

View内では、コンテキストを設定し、データをコンテキストに格納します。たとえば、データベースからユーザーのリストを取得し、それをコンテキストに追加できます。

Pythonファイル「views.py」から値が渡される、辞書型のオブジェクトで値を渡す

code上から4列目にコンテキストは、辞書型のオブジェクトで、下記の構造

{ 'キー(HTMLファイル内で変数名として使用)' : 値(ブラウザで実際に表示される) }

views.py:code

      from django.contrib.auth.models import User     # Userモデルをインポート 

      def my_view(request):
          users = User.objects.all()        # ユーザーデータを取得
          context = {'user_list': users}    # コンテキストにデータを格納
          return render(request, 'my_template.html', context)
        
    1行目の説明(from django.contrib.auth.models import User )
        UserはDjangoが提供する標準の認証システムの一部です。
        このモデルは、データベース内のユーザー関連の情報を管理するためのもので、django.contrib.auth.models内に存在します。
        通常、これはDjangoが提供する組み込みのモデルです。このモデルはユーザー名、パスワード、メールアドレスなどのユーザーに関する情報を保持します。
        Djangoの認証システムは、ユーザー認証、権限管理、ログイン、ログアウト、パスワード変更などの一般的な認証機能を提供します。
          from django.contrib.auth.models import Userという行は、django.contrib.authの中にあるmodelsからUserをインポートしています。
          これにより、そのファイル内でUserモデルを使用することが可能となります。
        
HTMLテンプレート上で、{{ 辞書のキー }}とすることで、辞書の値を受け取り表示ができる DjangoでViewからTemplateへ値を渡したいときは、「コンテキスト」を渡します。
Templateでのコンテキストの使用
code

    <ul>
      {% for user in user_list %}

      <li> { { user.name }}  </li> 

       { %  endfor %}
    </ul> 
  
*この例では、Viewでコンテキストに user_list という名前でユーザーデータを渡し、Template内でそれを展開して表示しています。
コンテキストは、WebアプリケーションにおいてデータをViewからTemplateに伝えるための重要なツールであり、動的なコンテンツを生成するのに役立ちます。

{{ 変数名 }} と {% タグ名 %} は、主にテンプレートエンジン(通常はWebフレームワークで使用)で使用される特殊な記法です。これらは通常、動的なコンテンツを生成するために使用されます。以下にそれぞれの説明を示します:

{{ 変数名 }}(変数展開):

ダブルブレース({{ と }})で囲まれた部分は、テンプレート内で変数を表示するために使用されます。
例えば、Webページのテンプレート内で {{ username }} というコードを見つけた場合、実際のユーザー名(変数 username の値)がその位置に表示されます。
テンプレートエンジンは、これらの変数を実行時に評価し、その値をテンプレート内に挿入します。
{% タグ名 %}(テンプレートタグ):

カーリーブレース({% と %})で囲まれた部分は、テンプレート内で制御フロー、条件分岐、ループ、テンプレートのロジックなどを実行するために使用されるタグです。
これらのタグは通常、if 文、for ループ、block など、テンプレート内の制御を変更するために使用されます。
例えば、以下のコードは条件に基づいてコンテンツを表示または非表示にするために使用されます:

Copy code

{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}!</p>
    {% else %}
<p>Please log in.</p>
{% endif %}

このコードは、ユーザーがログインしているかどうかに応じて表示するコンテンツを切り替えます。
テンプレートエンジンは、これらの変数展開とテンプレートタグを処理し、最終的なHTMLやテキストを生成します。これにより、動的なWebページを作成し、データを表示および操作できるようになります。



ダブルブレース、カーリーブレース

テンプレートエンジンには、テンプレート内でコンテンツを制御するために使用されるさまざまなデリミタやタグがあります。以下は一般的なものの一部です

ブレース(カーリーブレース)
テンプレート変数やタグを囲むために使用されます。例えば、{{ 変数名 }} は変数を展開し、{% タグ名 %} はテンプレートタグを示すために使用されます。
パーセント記号
タグやフィルタを含むタグの開始と終了を示すために使用されることがあります。例えば、{% if ... %} は条件分岐の開始を示し、{% endif %} は条件分岐の終了を示します。
中括弧(ブラケット)
一部のテンプレートエンジンでは、中括弧を変数やタグを囲むために使用します。例えば、{ { 変数名 } } や { % タグ名 % } のように使われます。
  
角括弧
一部のテンプレートエンジンでは、角括弧 [ ] が変数やタグを囲むために使用されることがあります。
  
その他のカスタムデリミタ
一部のテンプレートエンジンでは、開始と終了デリミタをカスタマイズできることがあり、例えば << 変数名 >> や << タグ名 >> のように独自のデリミタを定義できます。
異なるテンプレートエンジンやプログラミング言語によって、デリミタの形式や構文が異なることがあります。使用しているテンプレートエンジンのドキュメンテーションを確認して、正確なデリミタの使用方法を理解することが重要です。
デリミタ
「デリミタ」という用語は、一般的に、テキストやデータを区切るために使用される特定の文字または文字列を指します。デリミタは、データを区切って異なるフィールドや要素に分け、それを処理や解釈する際に便利です。デリミタは、テキストファイルの形式やプログラミングのコンテキストにおいて、データの整列や区切りを定義するのに役立ちます。 以下は一般的なデリミタの例です
カンマ (,) デリミタ
CSV(Comma-Separated Values)ファイルなどでよく使われます。データをカンマで区切って並べる形式です。
例: John,Doe,30,New York
タブ (\t) デリミタ
TSV(Tab-Separated Values)ファイルで使用されます。データをタブ文字で区切って並べる形式です。
例: John Doe 30 New York
パイプ (|) デリミタ
パイプ記号でデータを区切る形式です。データベースのエクスポートや一部の設定ファイルで使用されます。
例: John | Doe | 30 | New York
スペースデリミタ
空白文字でデータを区切ることがあります(半角)。複数のスペース、タブ、または他の空白文字が使用されることがあります。
例: John Doe 30 New York
カスタムデリミタ
特定の文脈やアプリケーションに合わせてカスタムデリミタを定義することもできます。
例えば、セミコロン (;) またはコロン (:) をデリミタとして使用することがあります。
デリミタは、データの区切りとして明示的に設定され、データの取り扱いや処理を容易にします。例えば、CSVファイルの場合、カンマをデリミタとして使用してデータを区切ることで、各フィールドを簡単に取得し、データを表形式で表示できます。

Model(モデル)

MVCアーキテクチャがMVT(Model-View-Template)と呼ばれることもあります。モデル(Model)はこのアーキテクチャの「Model」部分に対応します。
models.py:
このファイル内でモデルクラスを定義します。モデルクラスはデータベーステーブルを表し、データベースの各フィールドを定義します。これらのフィールドには、データの型や関連性を指定します。モデルを使用して、データベーステーブルの作成、データの挿入、更新、削除などのデータベース操作が可能になります。
ビュー(views.py):
ビュー(View)はクライアントのリクエストを受け取り、モデルを使用してデータベースからデータを取得し、それをテンプレートに渡す役割を果たします。ビュー内でモデルを操作して、データベースとのやり取りを行います。
管理者サイト(admin.py):
管理者サイトをカスタマイズするためにもモデルが使用されます。モデルを管理者サイトに登録することで、管理者はデータベース内のデータを直接操作できます。
 Djangoのモデル(Model)を定義しているmodels.py:ファイルです。
     データベースとのやり取りを担当し、データの保存や操作を管理します。
models.py: code

 from django.db import models Djangoのモデルを定義するためのライブラリであるmodelsモジュールをインポートしています。
           
      class MyApp(models.Model):      MyAppはモデルの名前です。models.Modelを継承しています。DjangoのModelクラスを継承することで、MyAppはデータベーステーブルとの対応を持ちます。
                  title = models.CharField(max_length=100)   titleは文字列フィールドであり、CharField型を使っています。max_lengthはこのフィールドの最大文字数を示します。
                   content = models.CharField(max_length=1000)    同様に、contentも文字列フィールドですが、長さがより長いmax_lengthを持っています。
                   timestamp = models.DateTimeField(auto_now_add=True)  timestampは日付と時刻を格納するフィールドであり、DateTimeField型を使用しています。auto_now_addは、このフィールドが作成時に自動的に現在の日時を記録するように指示しています。
           
          def __str__(self):
              return f"{self.title} - {self.content}"
                                    __str__関数はオブジェクトが文字列として表現されるときに使用される特殊メソッドです。ここでは、オブジェクトが表示されるときのフォーマットを定義しています。
    このコードは、Djangoのモデルに関連するデータベーステーブルの定義を行っており、MyAppモデルはtitle、content、timestampの3つのフィールドを持つことを定義しています。
      

modelsモジュール

        Djangoのmodelsモジュールは、Djangoフレームワーク内でデータベースとのやり取りを行うためのインターフェースを提供します。これは、Pythonのオブジェクト指向プログラミングを使用して、データベーステーブルとそれに関連する属性をモデリングする方法を提供します。

        models.ModelはDjangoが提供するクラスで、これを継承することで、Pythonのクラスをデータベースのテーブルとして利用できます。このようなモデルクラスには、フィールド(CharFieldやDateTimeFieldなど)を使用して、データベースのテーブル内の各列を定義します。

        modelsモジュール自体は、Djangoの一部であり、データベースとのやり取りを容易にするためにデザインされています。このモジュールを使うことで、Pythonコード内でデータベースの構造や操作を宣言的に記述することができます。そして、この設定を元にDjangoがデータベースとの相互作用を処理します。このように、modelsモジュールは、Djangoフレームワーク内でデータベースにアクセスするための機能を提供しています。

9

urls.py

urls.pyの役割
Djangoのurls.pyは、ユーザーからのHTTPリクエストを受け取り、どのページを表示するかを判断します。

これをルーティングといいます。
1 ビューをインポートする
          ・views.pyそのものをインポートする
                     以下のコマンドで「views.py」そのものをインポートできます。
                 from . import views 「.」は記述しているファイルの属するフォルダ(カレントディレクトリ)の意味
          ・一列で関数(もしくはクラス)をインポートする
                     from .views import ビュー関数(ビュークラス), ビュー関数(ビュークラス)
          ・ビュー関数(もしくはクラス)を綺麗に並べる
                      from .views import (
                                          index, 
                                          profile, 
                                          contact,
                                          DetailView, #こちらはViewクラスです
                                        )
          ・ほかのアプリケーションからインポートする
                       from アプリ.views import ビュー関数(クラス)
                       例えば、accountsアプリからビュー関数「my_login」をインポートするときは、以下のようになります。
                       from accounts.views import my_login   
2変数「urlpatterns」にパスを定義する
                  urlpatternsは、パスを要素として持つリスト型の変数です。
3Djangoでのパスの書き方
urlpatternsは、パスを要素として持つリスト型の変数です。
ルーティングの役割を担っています。
[宛先アドレスの情報を元に最適な転送経路を割り出す]

主には2つ
    path(相対URL, 紐付ける関数(クラス), ページ名)
    path(相対URL, include(紐付けたいurls.py))

「include」メソッドは、ビュー関数ではなく、別のurls.pyと紐付けたいときに使えるメソッドです。
こちらの例では「myapp」内のurls.pyと紐付けます。

#プロジェクトフォルダ内のurls.py

urlpatterns = [
              path("myapp/", include("myapp.urls"),
]
includeメソッドの引数は、文字列で記載します。

#アプリフォルダ内のurls.py

from .views import myapp-list

urlpatterns = [
              path("list/", myapp-list, name="myapp-list"),
]
この場合は、「myapp-list」ページの相対URLは、以下のようになります。
/myapp/list/

参考 : https://itc.tokyo/django/django-path/
     まとめ   ・urls.pyは、URLとViewの紐付けが主な役割
                  ・urls.pyの書き方は、pathメソッドに正しい値を渡すこと
                  ・path以外にも、includeやre_pathを覚えておくと便利
10 Top Page 

View(ビュー)

     View参照サイト

以下制作中です