見出し画像

Cloud9でのDjango学習.2

データベースを作成

学習.2がデータベースを作成から始める理由は人により選ぶデータベースが違うと考えたからです。
SQLiteは「Cloud9&DjangoでPiazaCloud-todoを再現してみる①」でおこなったのでここではMariaDBを使います。
データベース作成前にMariaDBクライアントをインストールする。

MariaDBクライアント

モジュールをインストール
pip install PyMySQL

(myenv) ec2-user:~/environment/my_django/mysite $ pip install PyMySQL
Collecting PyMySQL
Downloading PyMySQL-1.1.1-py3-none-any.whl.metadata (4.4 kB)
Downloading PyMySQL-1.1.1-py3-none-any.whl (44 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.0/45.0 kB 6.0 MB/s eta 0:00:00
Installing collected packages: PyMySQL
Successfully installed PyMySQL-1.1.1
(myenv) ec2-user:~/environment/my_django/mysite $

データベースを起動

起動してスーパーユーザで入ってmydbデータベースを作成

(myenv) ec2-user:~/environment/my_django/mysite $ sudo service mariadb restart
Redirecting to /bin/systemctl restart mariadb.service
(myenv) ec2-user:~/environment/my_django/mysite $ sudo mariadb -u root -p
Enter password:[ENTER]
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.23-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database mydb CHARACTER SET utf8mb4;※文字コード部分は大事
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]>

ユーザの作成&権限

MariaDB [(none)]> use mydb
Database changed
MariaDB [mydb]> create user 'user'@'localhost' identified by 'passwd';
Query OK, 0 rows affected (0.002 sec)

MariaDB [mydb]> grant all on mydb.* to 'user'@'localhost';
Query OK, 0 rows affected (0.002 sec)

MariaDB [mydb]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [mydb]>exit

setting.pyのデータベース設定

#DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
#}
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'user',
        'PASSWORD': 'passwd',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
        }
    }
}

/my_django/mysite/mysite/settings.py

init.pyを修正

指定したmysite全体をパッケージとして初期化時にこのモジュールを読み込みます。

import pymysql
pymysql.install_as_MySQLdb()

/my_django/mysite/mysite/__init__.py

テーブル、モデル等の作成

モデルはmodels.pyで指定

from django.db import models

class Post(models.Model):
    body = models.CharField(max_length=200)

/my_django/mysite/todo/models.py

モデルからマイグレーションファイルを作成

(myenv) ec2-user:~/environment/my_django/mysite $ python3 manage.py makemigrations todo
Migrations for 'todo':
todo/migrations/0001_initial.py
- Create model Post
(myenv) ec2-user:~/environment/my_django/mysite $

作成したマイグレーションファイルを実行しテーブルを作成する

(myenv) ec2-user:~/environment/my_django/mysite $ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, todo
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 auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
Applying todo.0001_initial... OK
(myenv) ec2-user:~/environment/my_django/mysite $

管理者アカウントの作成

python3 manage.py createsuperuser

(myenv) ec2-user:~/environment/my_django/mysite $ python3 manage.py createsuperuser
ユーザー名 (leave blank to use 'ec2-user'): 管理者ID
メールアドレス: kyomi-r@receptorinc.com
Password:管理者PW
Password (again):管理者PW
Superuser created successfully.
(myenv) ec2-user:~/environment/my_django/mysite $

setting.pyの最終行を追加しました

CSRF_TRUSTED_ORIGINS = ['https://Djangoで起動したurl']

/my_django/mysite/mysite/settings.py

管理サーバから作成したテーブルに接続できるようにadmin.pyに設定

from django.contrib import admin
from .models import Post

admin.site.register(Post)

/my_django/mysite/todo/admin.py

サーバーを実行
python3 manage.py runserver 0.0.0.0:8080
起動したURLにadminを付ける
https://貴方のサーバー.amazonaws.com/admin/
Cloud9+Django+MySQLの環境はサクッと済ませまたかった。

ありがとうございます。出典元:
@yutoun(jo e) Did you install mysqlclient?って聞かれたらどうすればいい?


この記事が気に入ったらサポートをしてみませんか?