【django】todoリストアプリを作ってみる①(初期設定)【pythonメモ】

pythonLOGO python
記事内に広告が含まれています。



『.』を付けてプロジェクトを実行する

projectを作るフォルダ(todo)を作ってから、そのフォルダ下で

django-admin startproject todoproject .

こうすると余計なフォルダが作成されない。

出来たフォルダはこう。

アプリを作る

python3 manage.py startapp todo

するとこんなファイルが出来る

setting.pyを編集する

『todoproject』の方のこれを

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

こう

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR, 'templates'], # 追記
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

ここの部分も

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

こう

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'todo', # 追記
]

templatesフォルダを作成する

mkdir templates

作成箇所はここ

urlのつなぎこみ

touch urls.py

でtodo下に作成

todoproject > urls.py を

from django.contrib import admin
from django.urls import path, include
                              # ↑追記

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('todo.urls')), # 追記
]

pathの中身の”は、『urlの記載が無い時に呼び出すもの』の定義

models.pyを書いていく

ここのやつ

その他例としてdijango モデル フィールド 種類 でググってみるのもよし

from django.db import models

# Create your models here.
class TodoModel(models.Model):
  title = models.CharField(max_length=100)
  memo = models.TextField()

makemigrationsとmigrate

makemigrationsを作る事で、models.pyのエラーの内容?変な挙動が把握できるらしい。そのコマンドが「migrate」

todo.pyのある階層で

python3 manage.py makemigrations

エラーが出るのでtodoの中のurls.pyを修正する

from django.urls import path
from .view import todo

urlpatterns = [
    path('a/', todo),
]

views.pyも修正

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

# Create your views here.

def todo(request):
  return HttpResponse('')

あらためて

python3 manage.py makemigrations

色々できました

さらにデータベースに書き込みを行うためのコマンドを入力

python3 manage.py migrate

admin/に入れるスーパーユーザーを作成

todoフォルダのところ

manage.pyが見えるところで

python3 manage.py createsuperuser

パスワードだけ簡易なものを設定して、サーバーを立ち上げる

python3 manage.py runserver

で起動してから、http://127.0.0.1:8000/adminにアクセス

これで入っちゃう

admin.pyを変更する

from django.contrib import admin
from .models import TodoModel

# Register your models here.

admin.site.register(TodoModel)

管理画面に入りリロードをすると

これが

こうなる

Todo models の +add をクリック

「買い物をする」 「卵を買う」等2つTodoを記載する

以下で見え方を調整していく

models.py

こうすると

from django.db import models

# Create your models here.
class TodoModel(models.Model):
  title = models.CharField(max_length=100)
  memo = models.TextField()
  def __str__(self):
    return self.

こうなる

さらにこうして

from django.db import models

# Create your models here.
class TodoModel(models.Model):
  title = models.CharField(max_length=100)
  memo = models.TextField()
  def __str__(self):
    return self.title

こうしてリロード

ListViewを設定する

linkの設定をする

いままでの部分を振り返ると

todoproject>urls.pyは

from django.contrib import admin
from django.urls import path, include
                              
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('todo.urls')), # ここの部分は
]

path(”, include(‘todo.urls’)),

は、『”(シングルクオート2つ)』は、つまり、urlにパスが入っていない場合はtodo>urlsを呼び出します。

という意味になる。

なので呼び出し先のurls.pyをこの状態から

from django.urls import path
from .views import todo

urlpatterns = [
    path('a/', todo),
]

この状態に作り込んで行く

from django.urls import path
from .views import 

urlpatterns = [
    path('list/', TodoList.as_view()), # TodoListはclass classの場合は.as_viewをつける
]

classを作成する

todo>views.pyを更新する

from django.shortcuts import render
from django.views.generic import ListView

# Create your views here.

class TodoList(ListView):
  template_name = 'list.html'

list.htmlを作成する

templateフォルダ下にlist.htmlファイルを作成し、

{% comment %} 複雑な処理は{% %}で囲む {% endcomment %}
{% for item in object_list %} 
{% comment %} データを扱う時は{{}}で囲む {% endcomment %}
{{ item.title }}
{{ item.memo}}
{% endfor%}

ここで、titleとmemoはmodels.pyで定義されているもの

viws.pyにその他のモデルを使えるようにする

from django.shortcuts import render
from django.views.generic import ListView
from .models import TodoModel # 追記

# Create your views here.

class TodoList(ListView):
  template_name = 'list.html'
  model = TodoModel # 追記

urls.pyでもimportをする

from django.urls import path
from .views import TodoList

urlpatterns = [
    path('list/', TodoList.as_view()),
]

ここまでで起動してみる

python3 manage.py runserver
http://127.0.0.1:8000/list/

なんとかうまくいった

list.htmlをいじってみる

{% comment %} 複雑な処理は{% %}で囲む {% endcomment %}
{% for item in object_list %} 
{% comment %} データを扱う時は{{}}で囲む {% endcomment %}
<ul>
  <li>{{ item.title }}</li>
  <li>{{ item.memo }}</li>
</ul>
{% endfor%}
http://127.0.0.1:8000/list/

うまくいった

コメント

タイトルとURLをコピーしました