connet.lolipop.jp
■「settings.py」を修正
アプリケーションをプロジェクトに組み込むため、セッティングの修正や追加を行います。

1. # Application definition

アプリケーションをINSTALLED_APPSの変数に追加。
≫巻末に詳細に解説されているサイトを掲載しましたので、ご参照下さい。


2. # Database

利用するデータベースを設定するところです。
デフォルトで「Sqlite」データベースが設定されています。このままで利用することにします。


3. # Internationalization

日本対応へ修正をしました。


settings.py

   ┊
   ┊
   ┊

# Application definition

INSTALLED_APPS = [
    'myliteapp.apps.MyliteappConfig', #追加しますーアプリケーションをプロジェクトに含める。パスをapps.pyに指定.
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

   ┊
   ┊
   ┊

# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

   ┊
   ┊
   ┊

# Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/

# 修正
LANGUAGE_CODE = 'ja'

# 修正
TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

# USE_TZ = True
USE_TZ = False  #データを日本時間で表示したい場合はこちら.

   ┊
   ┊
   
■「urls.py」を修正
Djangoプロジェクトのルーティングと言われる「urls.py」は、プロジェクト作成時に直下に同名のフォルダとともに自動生成されます。

ここでは、以下のようにアプリケーションのpathを追加してください。

urls.py
from django.contrib import admin
from django.urls import path,include
 
urlpatterns = [
    path('admin/', admin.site.urls), #生成時に書かれています.
    path('myliteapp/', include('myliteapp.urls')), #追加します. 
]

■アプリケーションの中に「urls.py」を作成
アプリケーション作成時には、このルーティングと呼ばれるファイルは自動で生成されないため、前記と同名の「urls.py」を新たに作成します。

urls.pyには、呼び出すページ(url)と、ビュー(「views.py」)との組み合わせパターンを作成します。
ユーザーのリクエストに応じて、このパターンのもとで、ビュー(「views.py」)とテンプレートファイルとの間で、データや処理・情報の受け渡しを行うことができます。

これで、ルーティングを行う同名のファイルが、プロジェクトとアプリケーションにそれぞれ存在することになります。

urlpatterns変数に設定のpathについて。
第一引数はurl(ページの場所)、第二引数は関数(views.py)、第三引数は名前になります。

urls.py
from django.urls import path
from . import views

app_name='myliteapp'
 
urlpatterns = [
    path('', views.index, name='index'),
    path('create', views.create, name='create'),
    path('allshow', views.allshow, name='allshow'),    
    path('edit/<uuid:id>', views.edit, name='edit'),
    path('show/<uuid:id>', views.show, name='show'),    
    path('deletion/<uuid:id>', views.deletion, name='deletion'),
]

■モデルの作成
データベースに登録する、モデル(テーブル)を作ります。

他の多くの言語ではSQL文を書いて作りますが、Djangoはカラムにフィールドを定義するだけ。視覚的でいいですね...。

モデルの名前は「MyLiteAppModel」とし、7つのカラムを定義します。

1. idUUID
2. name氏名
3. address住所
4. mailメール
5. age年齢
6. created_at登録日時
7. updated_at更新日時

UUIDは、ソフトウェア上のオブジェクトを識別する、重複のないランダムな文字列を生成する識別子と言われます。

models.py
from django.db import models
import uuid
import datetime
from django.utils import timezone

#uuid生成関数
def get_uuid():
    return uuid.uuid4()
	

#モデルクラス作成(サブクラス)   
class MyLiteAppModel(models.Model): #Model継承      
    id = models.UUIDField(primary_key=True, default=get_uuid, max_length=32, editable=False)
    name = models.CharField(max_length=40)
    address = models.CharField(max_length=255)
    mail = models.CharField(max_length=255)
    age = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True) #データ登録の日時を保存.
    updated_at = models.DateTimeField(auto_now=True)     #データ登録の日時を現在の日時に更新.

    """    
    Djangoにはデータベースを管理するツール(admin)が用意されています。
    この管理ツールを使って、いつでもモデル内のデータを取り出せるように、
    あるいは、モデルから項目の値を取得して利用したい場合などに設定しておく関数。
    以下の関数はモデルのnameの値を取得します。
    """
    def __str__(self): #selfーこのモデル(インスタンス)
        return self.name
		
■アプリケーションの中に「forms.py」を作成
新たに「forms.py」ファイルを作成して、モデルと照合した自身のフォームクラス(SampleForm)を作ります。

▾フォームクラスはビュー(「views.py」)と連携して、テンプレートファイルへ反映させます。
▾フォームクラスを利用すると、システムが入力データをチェック(検証)してくれます。

基本的には「forms.py」は作らなくても、models.py、views.py、テンプレートファイルの連携で、同等のものは作ることはできます。
自分好みの機能と見ばえのいいフォームを作るなら、この方がいいかもしれません...。

forms.py
from django import forms
from .models import MyLiteAppModel

#フォームクラス作成(サブクラス)
class SampleLiteForm(forms.ModelForm): #ModelForm継承  
    #クラスのデータの説明.
    class Meta:

        model = MyLiteAppModel

        fields = ('name','address','mail','age',)

        #widgetsを使って各種入力フォーム作り、入力文字列をチェックさせるようにします.
        widgets = {
            'name':forms.TextInput(),
            'address':forms.TextInput(),
            'mail':forms.EmailInput(),
            'age':forms.NumberInput(),
        }
        labels = {
            'name':"name",
            'address':"address",
            'mail':"mail",
            'age':"age",
        }
		
■「views.py」にCRUD処理を作成する
プロジェクト作成時、このファイルには基本的なコード以外何も書かれていません。

ビュー「views.py」は、ルーティング「urls.py」のルールもとで、テンプレートファイルとの間で処理・情報やデータの受け渡しを行います。

CRUD処理の簡易なコードです。
views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.contrib import messages
from .models import MyLiteAppModel # サブクラスをインポート
from .forms import SampleLiteForm  # サブクラスをインポート

# Index
def index(request): #indexリクエスト ー アプリケーションのルーティング「urls.py」で定義.
    context = {
        'pagetitle': 'Index', #context変数にデータを作成.
    }
    return render(request, 'myliteapp/index.html', context) #テンプレートファイルへ反映. 

# Create
def create(request):  
    form = SampleLiteForm(request.POST or None) #POSTフォームのインスタンス作成.
    context = {
       'form': form,
    }
    if request.method == 'POST':
        if form.is_valid(): #入力データのチェック.
            recs = MyLiteAppModel(**form.cleaned_data) #POSTデータのインスタンス作成ー**は複数のキーワード入力を受取る.
            recs.save() #データセーブ
            context = {
                'msg': 'Successfully Created',
                'form': form,
            }
            return render(request, 'myliteapp/create.html', context)   
    return render(request, 'myliteapp/create.html', context)

# Edit
def edit(request, id):
    edit_rec = MyLiteAppModel.objects.get(id=id) #編集データの取得.
    form = SampleLiteForm(instance=edit_rec) #編集フォームのインスタンス作成. 
    if request.method == "POST":
        form = SampleLiteForm(request.POST, instance=edit_rec) #POSTデータのインスタンス作成
        if form.is_valid():
            form.save()           
            messages.success(request, 'データを更新しました。') #システムメッセージを利用.
            url = '/myliteapp/edit/' + str(id) #str関数で文字列に変換.
            return redirect(to=url) #元のページへ移動.
    context = {
        'idoutmsg': str(id),
        'form':form,
    }
    return render(request, 'myliteapp/edit.html', context)

# Show
def show(request, id):
    rec_show = MyLiteAppModel.objects.get(id=id)
    context = {
        'rec_show':rec_show,
    }
    return render(request, 'myliteapp/show.html', context)

# All_show
def allshow(request):  
    all_list = MyLiteAppModel.objects.all() #全データ取得.
    context = {
        'all_list':all_list,
    }
    return render(request,'myliteapp/allshow.html',context)

# Deletion
def deletion(request, id):
    derec = MyLiteAppModel.objects.get(id=id)
    derec.delete()
    return redirect('/myliteapp/allshow') #ページ移動ー最新の全データ表示.
		
Search
Google


↟ このページの先頭へ