CentOS 7PythonReact APIサーバDjango REST frameworkReact Backend

Reactアプリ開発:Backend構築〜Django REST framework 環境〜|CentOS7

classified-react-djangorestframework CentOS 7
スポンサーリンク

前回まで作った PostgreSQLpython 環境に加えて、React アプリの APIサーバ の役割を担当する Django REST framework 環境を作ります。

サーバ環境

  • Python 3.7.3
  • Django 2.2.2
  • PostgreSQL 11.4
  • Django REST framework 3.9.4

Python 仮想環境が必要です。事前に構築しておいてください。

PostgreSQL DB 環境が必要です。事前に構築しておいてください。

Django 環境構築

/reactjs/snowball/backend ディレクトリを作成して React アプリ開発:Backend 構築 〜 pyenv & Anaconda の Python 環境 〜|CentOS7 記事で作成した仮想環境 py37 に入ります。

[admin@centos7 snowball]$ mkdir backend
[admin@centos7 snowball]$ cd backend
[admin@centos7 backend]$
[admin@centos7 ~]$ source activate py37

(py37) [admin@centos7 ~]$ python -V
Python 3.7.3

Django をインストール

conda 環境に入って、pip install を使って Django をインストールします。

(py37) [admin@centos7 backend]$ pip install --upgrade pip
(py37) [admin@centos7 backend]$ pip install django
(py37) [admin@centos7 backend]$ pip install djangorestframework

Django プロジェクトを作成

$ django-admin startproject snowball .      ← 最後に . を付ける。snowballはプロジェクト名 ( 任意 )
(py37) [admin@centos7 backend]$ django-admin startproject snowball .
(py37) [admin@centos7 backend]$ ll
合計 4
-rwxrwxr-x 1 admin admin 628  6月 26 13:11 manage.py
drwxrwxr-x 2 admin admin  70  6月 26 13:11 snowball

パッケージをインストール

requirements.txt /reactjs/snowball/backend にコピペします。

(py37) [admin@centos7 backend]$ pip install -r /reactjs/snowball/backend/requirements.txt

パッケージをアップグレード ( 任意 )

全てのローカルパッケージをアップグレードする場合

pip-review を利用します。

(py37) [admin@centos7 backend]$ pip install pip-review
(py37) [admin@centos7 backend]$ pip-review --auto

個別にアップグレードする場合

–upgrade-U オプションを利用します。

$ pip install --upgrade package_name
 or,
$ pip install -U package_name

最新 requirements.txt を作成

(py37) [admin@centos7 backend]$ mv requirements.txt requirements.txt.org
(py37) [admin@centos7 backend]$ pip freeze > requirements.txt

Django App を作成

アプリ名:projects ( 任意 )

(py37) [admin@centos7 backend]$ python manage.py startapp projects

必要に応じて models.py、serializers.py、urls.py、views.py などのファイルに設定を追加します。

※ 何も設定しなくても Django サイトの動作確認はできます。

DB 作成

PostgreSQL の設置がが必要な方は React アプリ開発:Backend 構築 〜 PostgreSQL DB 環境 〜|CentOS7 記事をご覧ください。

CREATE USER your-account PASSWORD ‘your-db-password’;
CREATE DATABASE snowball OWNER your-account;

(py37) [admin@centos7 backend]$ sudo -u postgres psql -U postgres

postgres=# select current_user;
 current_user
--------------
 postgres
(1 行)

postgres=# select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          |
(1 行)

postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       |
 template0 | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(3 行)

postgres=# CREATE USER your-account PASSWORD 'your-db-password';
CREATE ROLE
postgres=# CREATE DATABASE snowball OWNER your-account;
CREATE DATABASE
postgres=#
postgres=# \l
                                          データベース一覧
   名前    |  所有者   | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+--------------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres     | UTF8             | en_US.UTF-8 | en_US.UTF-8       |
 snowball  | your-account | UTF8             | en_US.UTF-8 | en_US.UTF-8       |
 template0 | postgres     | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres          +
           |              |                  |             |                   | postgres=CTc/postgres
 template1 | postgres     | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres          +
           |              |                  |             |                   | postgres=CTc/postgres
(4 行)

postgres=# select * from pg_user;
  usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconf
ig 
-----------+----------+-------------+----------+---------+--------------+----------+----------+--------
---
 postgres  |       10 | t           | t        | t       | t            | ******** |          | 
 snowadmin |    16384 | f           | f        | f       | f            | ******** |          | 
(2 行)

postgres=#
postgres=# \q
(py37) [admin@centos7 backend]$

DB 情報を Django へ反映する

デフォルトの sqlist3 をコメントアウトして、postgresql を有効化します。

(py37) [admin@centos7 backend]$ vi snowball/settings.py
...
 76 #DATABASES = {
 77 #    'default': {
 78 #        'ENGINE': 'django.db.backends.sqlite3',
 79 #        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 80 #    }
 81 #}
 82  
 83 DATABASES = {
 84     'default': {
 85         'ENGINE': 'django.db.backends.postgresql',
 86         'NAME': 'snowball',
 87         'USER': 'your-id',
 88         'PASSWORD': 'your-password',
 89         'HOST': 'localhost',
 90         'PORT': '5432',
 91     }
...

Ident authentication エラーに対処

ユーザ認証が必要なコマンドを打つと、Ident authentication エラーになるので対処して置きます。( サーバを起動したり、python manage.py migrateコマンドを実行する際発生 )

エラー文:django.db.utils.OperationalError: FATAL: Ident authentication failed for user “your-account”

ライン番号 8386 のように ident を md5 に変更します。

(py37) [admin@centos7 backend]$ conda deactivate
[admin@centos7 backend]$ sudo vi /var/lib/pgsql/11/data/pg_hba.conf
     77 # TYPE  DATABASE        USER            ADDRESS                 METHOD
     78
     79 # "local" is for Unix domain socket connections only
     80 local   all             all                                     peer
     81 # IPv4 local connections:
     82 # host    all             all             127.0.0.1/32            ident
     83 host    all             all             127.0.0.1/32             md5
     84 # IPv6 local connections:
     85 # host    all             all             ::1/128                 ident
     86 host    all             all             ::1/128                 md5

# PostgreSQLを再起動
[admin@centos7 backend]$ sudo systemctl restart postgresql-11.service

Django Migration および User 作成

何も設定しなくてもサイトの動作確認はできます。

[admin@centos7 backend]$ cd /reactjs/snowball/backend
[admin@centos7 backend]$ source activate py37
(py37) [admin@centos7 backend]$

# migration
(py37) [admin@centos7 backend]$ python manage.py makemigrations projects
(py37) [admin@centos7 backend]$ python manage.py migrate

# User 作成 
(py37) [admin@centos7 backend]$ python manage.py createsuperuser
Username (leave blank to use 'admin'): admin
Email address: your@email.com
Password: <パスワード>
Password (again): <パスワード>
Superuser created successfully.
(py37) [admin@centos7 backend]$ 

Firewalld 設定

(py37) [admin@centos7 backend]$ conda deactivate
[admin@centos7 backend]$ sudo firewall-cmd --add-port=8000/tcp --permanent
success
[admin@centos7 backend]$ sudo firewall-cmd --reload
success

# 確認
[admin@centos7 backend]$ sudo firewall-cmd --list-all

Django 開発サーバ起動

開発サーバを起動します。

[admin@centos7 backend]$ conda activate py37
(py37) [admin@centos7 backend]$ python manage.py runserver 0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
June 26, 2019 - 16:17:01
Django version 2.2.2, using settings 'snowball.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.

以下は Django project を設定した場合のみ必要です。
何も設定しなかった場合は、ブラウザで接続 に飛ばしてください。

サイトを設定

Django Adminサイトへ接続してサイトを追加するとサイト ID が確認できます。

Django Adminサイト: http://<your-ip-address>:8000/admin/

django-admin-add-site-1
▲ Django Admin サイトへ接続し、Add を押下します ( Firefox )
django-admin-add-site-2
▲ 使用するドメイン ( jacepark.com ) を入力して SAVE を押下します ( Firefox )

サイトを追加した後、サイト名をクリックし、リンクに表示されたサイト ID を確認します。もしくは、サイト名にマウスオーバーすると左下のステータスウィンドウに表示される ID を確認します。

サイトIDの場合:http://<your-ip-address>:8000/admin/sites/site/5/change/
django-admin-check-site-id-1
▲ サイト ID を確認します ( Firefox )

Django Project の設定ファイルに反映する

[admin@centos7 backend]$ vi snowball/settings.py
...

SITE_ID = 5

...

ブラウザで接続

ALLOWED_HOSTS へ IP アドレスやサイト名を追加します。

10.10.1.10 と jacepark.com を追加する例:

[admin@centos7 backend]$ vi snowball/settings.py

ALLOWED_HOSTS = ['10.10.1.10','jacepark.com','localhost','127.0.0.1',..]

ALLOWED_HOSTS に追加しないと下記ようなエラーが出ます。
エラー文:
Disallowed Host at \
Invalid HTTP_HOST header: ‘10.10.1.10:8000’. You may need to add ‘10.10.1.10’ to ALLOWED_HOSTS.

<your-ip-address>:8000 or <your-domain>:8000 に接続します。

▼ 何も設定しなかった場合、The install worked successfully! Congratulations!ページが表示されます。

django_first_page
▲ Django : The install worked successfully! Congratulations!

▼ Django API設定をした場合、Django REST framework ページが表示されます。

django-api-server
▲ Api Root page ( 例 )

これで APIサーバ の開発環境 が整いました。

後はユーザを管理するための SignUpSignInソーシャルログインメール認証など、開発に必要な機能を追加できます。また、React のバックアンド環境の設定を React 側で行えます。これらはまた次回にポストします。

スポンサーリンク

参考文献

django.core.management | commands
Django SSL / HTTPS

コメント

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