djangoのmodelsの基本動作 マイグレーションから表示まで実装①

djangoのプロジェクトのスタートが終わったところから、modelsの実装、そしてhtml側での表示までをやってみます。

ゴールはこのようにhtml側にmodelsに登録した内容を表示させます。

環境

・django2.2

・python3.8

環境ができたところで

$django-admin startproject myapp

myapp/
    manage.py
    myapp/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

myappプロジェクトが作成できたら下記コマンドを実行します。

$python manage.py runserver

http://localhost:8000/

にアクセスし、下記画面が出ていればOKです。

ここからスタートします。

my_friendアプリの作成

まずはアプリを作成します。

プロジェクトとアプリの違いに関しては公式から確認下さい↓

https://docs.djangoproject.com/ja/1.11/intro/tutorial01/

それではコマンドを打ち込みます。

$python manage.py startapp my_friend

こんなディレクトリ構造でアプリが生成されました。

my_friend/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

settings.pyの設定

まずは、my_friendアプリを作成したのでsettings.pyの下記場所にdjango-contrib.my_friendを追記します。

‘my_friend’だけでもいいのですが、これは古い書き方で細微な問題もありますので、my_friend.apps.MyFriendConfigのような書き方をします。

<settings.py>

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

言語も下記のように変えておきます。

LANGUAGE_CODE = 'en-us'
↓
LANGUAGE_CODE = 'ja'

時刻も日本時間に変更します。

TIME_ZONE = 'Asia/Tokyo'

Friendモデルクラスの作成

友達登録フォームなので、このような形にします。

<my_friend/models.py>

from django.db import models

class Friend(models.Model):
    name = models.CharField(max_length=100)
    mail = models.EmailField(max_length=100)
    gender = models.BooleanField()
    age = models.IntegerField(default=10)
    birthday = models.DateField()

    def  __str__(self):
        return '<Friend:id' + str(self.id) + ',' + self.name + str(self.age) + ')>'

そしてマイグレーションをします。

% python manage.py makemigrations

Migrations for 'my_friend':
my_friend/migrations/0001_initial.py
- Create model Friend

これでマイグレーションファイルを作成できました。

続いてマイグレーションの実行します。イメージとしてはマイグレーションで生成したファイルを使えるように本体に流し込むイメージです。

% python manage.py migrate

Operations to perform:
Apply all migrations: admin, auth, contenttypes, my_friend, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying admin.0003_logentry_add_action_flag_choices… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying auth.0010_alter_group_name_max_length… OK
Applying auth.0011_update_proxy_permissions… OK
Applying my_friend.0001_initial… OK
Applying sessions.0001_initial… OK

これでDBを操作できる準備は整いました。

管理ツールからFriendを登録してみる

my_friend/admin.py

from django.contrib import admin
from .models import Friend

admin.site.register(Friend)

これで管理ツール側でDBを操作できるようになります。

管理ツールに入り操作する

管理ツールを使うためにも、スーパーユーザーを作成する必要があります。

下記コマンドで作成します。Usernameやpasswordを聞かれると思いますので設定してください。

% python manage.py createsuperuser

設定ができたら早速ログインしてみます。

http://127.0.0.1:8000/admin/

にリダイレクトし、先ほど設定したUsernameとPASSでログインします。

そして早速何か登録してみます。

右下のSAVEを押して、サクセスできれば一先ずOKです。

htmlに表示する

最初にパスの設定を行います。

myapp/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('my_friend.urls')),
]

my_friend/urls.py

from django.urls import path
from . import views

app_name = 'my_friend'

urlpatterns = [
    path('', views.index, name='index'),
]

my_friend/views.py

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

def index(request):
    # get時
    if request != 'POST':
        data = Friend.objects.all()
        context = {
            'title': '友達のデータ',
            'message': '登録一覧になります',
            'data': data,

        }
    return render(request, 'my_friend/index.html', context)

またmy_friendアプリ直下にtemplatesディレクトリとindex.htmlファイルを作成します。ディレクトリ構造は下記になります。

my_friend/templates/my_friend/index.html

そして、index.htmlに作成したファイルを表示できるかと思います。

{% load static %}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>{{title}}</title>
  <link rel="stylesheet" href="{% static 'my_friend/css/style.css' %}" />
</head>
<body>
    <h1>{{title}}</h1>
    <p>{{data}}</p>
</body>
</html>

※文字化けが対応できておりません。< は全て < となります。

cssも作成します。

パスは

my_friend/static/my_friend/css/style.css

body{     color: gray;     margin: 20px; }
h1{     color: #ff0000;     opacity: 0.3;     font-size: 36px; } 
p{     margin: 10px; } 
a{     color:blue;     text-decoration: none; }

それではhttp://localhost:8000/ へアクセスしてみます

とりあえず、表示ができました。先ほど管理ツール箇所で登録した内容がうまく表示されています。

長くなったのでこの記事はここでストップします。

次回は、ここからhtml側でデータの登録を行うコードを書いていきます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です