#データベースの作成
データベースを作っていくんですが、そのためにはまずmodels.py
にテーブルに内容を書き込んでいく必要があります。
from django.db import models
#timezoneを使うためにインポート
from django.utils import timezone
# Create your models here.
#models.Modelを書くのはお決まり
class Posts(models.Model):
#Metaとかobjectとかはおまじない
class Meta(object):
#作成されるテーブル名を指定
db_table = 'posts'
#カラム名=データの形式(管理画面に表示される名前,その他の制約)
text = models.CharField(verbose_name='本文', max_length=255)
created_at = models.DateField(verbose_name='作成日', default=timezone.now)
#管理画面に表示されるように設定(おまじない)
def __str__(self):
return self.text, self.created_at
これでpostsというテーブルを作る準備が完了しました。
これらを元にターミナルで操作していきます。
$ python manage.py makemigrations posts
Migrations for 'posts':
posts/migrations/0001_initial.py
- Create model Posts
これで0001_initial.py
ファイルが作成されました。
このファイルには作成されるデータベースの内容が書かれています。
ですが、このコマンドではデータベースがまだ作成されていません。準備です。
$ python manage.py sqlmigrate posts 0001
BEGIN;
--
-- Create model Posts
--
CREATE TABLE "posts" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "text" varchar(255) NOT NULL, "created_at" date NOT NULL);
COMMIT;
このコマンドでテーブルが作成される際のSQLコードが確認できます。
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, posts, sessions
Running migrations:
Applying posts.0001_initial... OK
はいこれでできました。ありがとうございます。
管理画面で確認するにはちょっと操作が必要なのですが、ここでは割愛します。
パスを通す
パスを通す作業をしないとせっかく書いたコードがブラウザに表示されませんね。
その他の設定もあるので先にやってしまいましょう。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#ここから追加部分
'posts',
'templates',
]
アプリケーションを作ったらINSTALLED_APPS
に追記しましょう。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#↓ここ1行を追加
'DIRS': [os.path.join(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',
],
},
},
]
templatesディレクトリを作成したのを作成したことをpythonに教えます。
また、動作確認用にviews.pyとhtmlも少し書いておきます。
from django.shortcuts import render
# Create your views here.
from django.views.generic import View
class IndexView(View):
def get(self,request, *args, **kwargs):
return render(request, 'posts/post.html')
index = IndexView.as_view()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block page_title %}{% endblock %}</title>
</head>
<body>
<hr>
<h1>{% block title %}{% endblock %}</h1>
<hr>
{% block content%}{% endblock %}
<hr>
</body>
</html>
{% extends "base.html" %}
{% block page_title %}post{% endblock %}
{% block title %}post{% endblock %}
{% block content %}
<h1>Posts</h1>
{% endblock %}
通常、base.html
を全てのページのベースにしてpost.html
やらが中身を入れていくっていう感じです。
次はいよいよurls.py
を書いていきます。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('posts.urls')),
]
from django.urls import path
from . import views
app_name = 'posts'
urlpatterns = [
path('', views.index, name='index'),
]
こんな感じでかけたらローカルサーバーを立ち上げて確認してみましょう。
$python manage.py runserver 3000
そしてGoogleやらでlocalhost:3000
と打ってみましょう。
こんな感じで出てきたらパス関係が完成です。
次から掲示板アプリのコードを書いていきましょう。