最近Djangoを始めたので、勉強がてら超シンプルなメモアプリを作ってみました。
基本的には公式のtutorialを参考にしています。
しかし、tutorialよりもさらに簡素なものです(笑)。
以下のようなトップページを持つアプリです。

バージョン等
- Python 3.6.0
- Django 2.2
Djangoのインストール
pip install django
実装
これから少しずつ実装していきますが、
全ソースコードはgithubにも上がっています。
https://github.com/tocom242242/simple_memo_for_studying_django
では少しずつ作っていきます。
まずプロジェクトを作成して、そのディレクトリに移動します。
今回は雑にプロジェクト名をsample_projectとします。
django-admin startproject project cd sample_project
Djangoでは、各機能をアプリ単位で扱います。
今回はメモ機能があるのでmemosというアプリを作成します。
アプリは以下のコマンドで作成できます。
python manage.py startapp memos
次にMemoモデルを作成します。
モデルはmemos/models.pyに記述します。
# memos/models.py
from django.db import models
class Memo(models.Model):
text = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.text
textフィールドがメモのテキストを保存するフィールドです。
created_atはデータを生成した時間です。
次に追加したアプリをプロジェクトに反映します。
これはsample_project/settings.pyに記述します。
# sample_project/settings.py
省略
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'memos.apps.MemosConfig', #new
]
省略
次に作成したモデルをDBに反映します。
以下のコマンドを叩くことで、sql文を書かなくてもDBにテーブルを作成してくれます。
python manage.py makemigrations memos python manage.py migrate
では、モデルを作って遊んでみます。まずは以下のコマンドでPythonの対話シェルを開きます。
python manage.py shell
通常のPythonの対話シェルではなく、このコマンドを使用することによってsample_project/settings.pyの設定を反映してくれるようです。
先程作ったモデルを使って遊んでみます。
from memos.models import Memo # すべてのメモを取り出す Memo.objects.all() # 新規のメモを作成 m = Memo(memo_text="test_memo") # メモの保存 m.save() m.id #=> 1 m.created_at #=> datetime.datetime(2020, 1, 22, 3, 52, 53, 752214, tzinfo=) # もう一度すべてのメモを取り出す Memo.objects.all()
次にviewsを書いていきます。
# memos/views.py
from django.shortcuts import get_object_or_404, render, redirect
from django.urls import reverse
from .models import Memo
def index(request):
memo_list = Memo.objects.all()
context = {'memo_list': memo_list}
return render(request, 'memos/index.html', context)
def detail(request, memo_id):
memo = get_object_or_404(Memo, pk=memo_id)
return render(request, 'memos/detail.html', {'memo': memo})
def insert(request):
memo = Memo.objects.create(text=request.POST["memo"])
memo.save()
index_url = reverse("index")
return redirect(index_url)
簡単に説明すると、indexメソッドがトップページのviewについて記述しています。
ここでは、ただすべてメモを取り出してトップページのレンダリングを行います。
detailメソッドではメモの詳細のviewについて記述しています。
insertメソッドでは新しいメモを作成する処理について記述しています。
ポストされたテキストを受け取り、そのテキストのMemoオブジェクトを作り保存します。
次にリンクの設定を行います。
# memos/urls.py
from django.urls import path
from . import views
urlpatterns = [
# /memos/
path("", views.index, name="index"),
# /memos/
path("insert", views.insert, name="insert_memo"),
# /memos/1/
path("/", views.detail, name="detail")
]
app自体のurlの設定を行います。
# app/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("", include("memos.urls")), # new
path('admin/', admin.site.urls),
]
トップページ、詳細ページを追加します。
追加するのはmemos/templates/memos/の下に書いていきます。
ディレクトリがなければ作ってください。
まず、memos/templates/memos/index.htmlを書いていきます。
<h2>メモの作成</h2>
<form method="POST" action="insert">
{% csrf_token %}
<input type="text" name="memo" />
<input type="submit" value="送信" />
</form>
<h2>メモ一覧</h2>
{% if memo_list %}
<ul>
{% for memo in memo_list %}
<li><a href="/{{ memo.id }}/">{{ memo.id }}:{{ memo.text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No memos are available.</p>
{% endif %}
次にdetail.htmlのページです。
memos/templates/memos/detail.html
{{ memo }}
ここまで実装できたら、以下のコマンドでサーバーを起動します。
python manage.py runserver
にアクセスするとトップページが開きます。
おまけ
管理ユーザーを作成して、そこから操作してみます。
python manage.py createsuperuser Username (leave blank to use 'okano'): admin Email address: admin_pass Error: Enter a valid email address. Email address: test@gmail.com Password: Password (again): Superuser created successfully.
admin上でMemoアプリを編集出来るようにします。
memos/admin.py
# memos/admin.py from django.contrib import admin from .models import Memo admin.site.register(Memo) # new
