2020年6月18日木曜日

Django プロジェクト作成

1.環境構築
1-1 インストールモジュールとバージョン

$ python3 --version
Python 3.6.8

$ mysql --version
mysql  Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)

$  mysql --version
mysql  Ver 15.1 Distrib 10.3.17-MariaDB, for Linux (x86_64) using readline 5.1

1-2 pythonのインストール

python Ver3.6をインストール

# yum install python36 python3-libs python36-devel
# python36 -m ensurepip       # pip(パッケージ管理ツール) を使えるようにする。
                              # 以降は、pipでパッケージをインストール。

1-3 python仮想実行環境の構築
pythonは、様々なバージョンの組み合わせの仮想実行環境を構築する事ができます。
# cd /usr/bin
# ln -s /usr/libexec/platform-python3.6 python36
# mkdir ~/Python_env
# cd ~/Python_env
# python36 -m venv venv36-d30
(# chmod -R a+rq /usr/local/venv36-d30)             # 一般ユーザで実行する場合
$ source ~/Python_env/venv36-d30/bin/activate

※下記環境がセットされる。
VIRTUAL_ENV=/home/takahab/Pyhton_env/venv/venv36
PATH=/home/takahab/Python_env/venv/venv36-d30/bin:$PATH
deactivate () {}

※ 必要なモジュールをpip3でインストールする。

1-4 Djangoのインストール
Django 3.0をインストール
$ pip3 install --upgrade pip
$ pip3 install Django

$ pip3 list
Package    Version
---------- -------
asgiref             3.2.10
Django             3.0.9
pip                     20.2
pytz                   2020.1
setuptools     39.2.0
sqlparse          0.3.1


1-5 モジュール更新( アプリケーションのバージョン環境に合わせる)

$ source /usr/local/venv36-d30/bin/activate
$ pip3 install --upgrade pip   (--proxy=http://192.168.1.xx:3128)
$ pip3 list
$ pip3 list --outdated               # 更新モジュールを表示します。
$ pip3 list --outdated | awk 'NR>2 {print $1}' | xargs pip3 install -U
$ pip3 freeze>requirements.txt
$ pip3 install -r requirements.txt   # requirements.txt内のバージョンの
                                     # モジュールをインストールします。

1-6 Djangoプロジェクトの作成

$ django-admin startproject Config
$ mv Config Project
$ cd Project
$ python36 manage.py startapp app

Project
├── Config
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   └── settings.cpython-36.pyc
│   ├── asgi.py
│   ├── settings.py          # 各種設定
│   ├── urls.py
│   └── wsgi.py              # Web Server Gateway Interface(ウィズギー)
├── app
│   ├── __init__.py
│   ├── admin.py

│   ├── apps.py
│   ├── migrations            # データベース定義を自動的に作成管理するコードが自動生成される。
│   │   └── __init__.py
│   ├── models.py             # データベースフィルド定義
│   ├── tests.py
│   └── views.py              # GET/POST 処理
└── manage.py


1-7 settings.pyの編集

$ vi ./Config/settings.py
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'app.apps.ApiConfig',             # 追記
]


$ vi Config/urls.py
from django.contrib import admin
from django.urls import path

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

    path('app/', include('app.urls',   namespace='app')),    # 追記
]


# 以下、新規ファイル作成
$ vi app/urls.py
from django.urls import path
from . import views

app_name = 'app'

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


2 デーベース

2-1 mysqlデータベース設定

mysql> create database django;            # django用空DB作成

mysql> use mysql
mysql> select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| admin            | %         | mysql_native_password |<--※
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)
mysql> quit

2-2 settings.pyの設定

$ vi Config/settings.py
import pymysql
pymysql.install_as_MySQLdb()
※  mysqlデータベースのバージョンによって初期化方法は異ります。

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': 'django',       # 予め空DBを作成しておく。
      'USER': 'admin',
      'PASSWORD':'password',
      'HOST': '',
      'PORT': '',
      'OPTIONS': {
            'charset': 'utf8mb4',
      },
      'ATOMIC_REQUESTS': True,
   },
   'service_db': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': 'service_data',   # 予め空DBを作成しておく。
      'USER': 'admin',
      'PASSWORD':'password',
      'HOST': '',
      'PORT': '',
      'OPTIONS': {
            'charset': 'utf8mb4',
      },
      'ATOMIC_REQUESTS': False,
   }
}

※  mysqlデータベースのインストール方法は省略します。

2-3 oracleの設定
# python36 -m pip install cx_oracle

ここから該当バージョンのドライバをタウンロード
https://www.oracle.com/technetwork/jp/database/features/instant-client/index-352321-ja.html
instantclient-basic-linux.x64-11.2.0.4.0.zip

# cd /opt/libs
# unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
# ln -s /opt/libs/instantclient_11_2 /opt/libs/oracle
# vi /etc/profile
export LD_LIBRARY_PATH=/opt/libs/oracle:$LD_LIBRARY_PATH
# . /etc/profile

# vi /etc/sysconfig/httpd
LD_LIBRARY_PATH=/opt/libs/oracle:$LD_LIBRARY_PATH



3. サービスの起動(デバック起動)
3-1 起動前準備

1) キャシュクリア
$ vi clean
rm -f  app/migrations/000?_initial.py
rm -f  app/migrations/000?_auto_*.py
rm -rf app/migrations/__pycache__

2) マイグレションと起動
$ vi build
echo python36 manage.py makemigrations-------------------------------
python36 manage.py makemigrations

echo python36 manage.py migrate--------------------------------------
python36 manage.py migrate

echo python36 manage.py createsuperuser------------------------------
python36 manage.py createsuperuser

echo python36 manage.py runserver 0.0.0.0:8000-----------------------
python36 manage.py runserver 0.0.0.0:8000

3-2 起動
$ ./clean
$ ./build
ユーザ名、mail、パスワード入力

※ 2回目以降のユーザ名入力は、[Cntl+C]でキャンセルする事ができます。


4. Apache連携_(20210726更新)

VENV仮想環境を構築してから下記を行う。
0) コンパイル環境とHTTPD開発環境をインストール
# dnf group install "Development Tools"
# dnf install httpd-devel
# dnf install python36-devel
# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# dnf install MariaDB-devel

1) WSGIインストール
$ pip3 install mod-wsgi
$ pip3 install mod-wsgi-httpd
※ mod-wsgi-httpdは、少し時間がかかる


$  pip3 freeze|grep wsgi
mod-wsgi==4.8.0
mod-wsgi-httpd==2.4.46.1

# vi /etc/httpd/conf.modules.d/20-wsgi.conf
LoadModule wsgi_module /var/www/wsgi/test/myenv/venv36-d324/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

# vi /etc/httpd/conf.d/wsgi.conf

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

WSGISocketPrefix /var/run/wsgi

WSGIDaemonProcess test user=apache group=apache processes=10 threads=15 \
       home=/var/www/wsgi/test\
       python-home=/var/www/wsgi/test/myenv/venv36-d324 \
       python-path=/var/www/wsgi/test/django:/var/www/wsgi/test/myenv/venv36-d324/lib/python3.6/site-packages

WSGIScriptAlias  /test /var/www/wsgi/test/Config/wsgi.py process-group=test

Alias /static/  /var/www/wsgi/test/static/
Alias /media/   /var/www/wsgi/test/media/

WSGIPassAuthorization on

<Location /test>
       WSGIProcessGroup test
</Location>




4. Apache連携

VENV仮想環境を構築してから下記を行う。

0) コンパイル環境とHTTPD開発環境をインストール
# dnf install httpd
# dnf group install "Development Tools"
# dnf install httpd-devel

1) WSGIインストール
# pip3 install mod-wsgi
# pip3 install mod-wsgi-httpd
# ※ mod-wsgi-httpdは、少し時間がかかる。
# pip3 freeze|grep wsgi
mod-wsgi==4.6.5
mod-wsgi-httpd==2.4.35.1
# ls /usr/local/venv36/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

※ pip3 install mod-wsgiで下記エラーが発生
※RuntimeError: The 'apxs' command appears not to be installed or is not executable.
下記をインストール
# dnf install httpd-devel

2) Apache(httpd)の設定
# vi /etc/httpd/conf.modules.d/20-wsgi.conf
LoadModule wsgi_module /usr/local/venv36/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
# httpd -M|grep wsgi
wsgi_module (shared)
# vi /etc/httpd/conf.d/wsgi.conf
#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300 

WSGIApplicationGroup %{GLOBAL}

WSGISocketPrefix /var/run/wsgi

WSGIDaemonProcess test user=apache group=apache processes=1 threads=100 maximum-requests=10000 \
       home=/var/www/wsgi/test \
       python-home=/var/www/wsgi/test/myenv/venv36-d324 \
       python-path=/var/www/wsgi/test/django:/var/www/wsgi/test/myenv/venv36-d324/lib/python3.6/site-packages \
       lang=ja_JP.utf8

WSGIScriptAlias  /test /var/www/wsgi/test/Config/wsgi.py process-group=test

Alias /static/  /var/www/wsgi/test/static/
Alias /media/   /var/www/wsgi/test/media/

WSGIPassAuthorization on

<Location /test>
       WSGIProcessGroup test 
</Location>


# vi /etc/sysconfig/httpd
LD_LIBRARY_PATH=/opt/libs/oracle:$LD_LIBRARY_PATH

# mkdir /var/www/wsgi

# apachectl configtest
Syntax OK
# curl localhost/analyze
# systemctl restart httpd

※pip3 install 時のエラー
ERRPR:   /bin/sh: mariadb_config: コマンドが見つかりません
# yum install MariaDB-devel
ERROR: /usr/bin/ld: -lmariadb が見つかりません
# yum install MariaDB-shared
ERROR: ImportError: Unable to find zbar shared library
# yum install zbar

5. ディレクトリ体型

Analyze                          # プロジェクト
├── Config                       # プロジェクトの設定
│   ├── routers.py
│   ├── settings.py              # 各種設定
│   ├── urls.py                  # URL(ベース)
│   └── wsgi.py
├── README
├── Users                        # ログインアプリ
│   ├── __init__.py
│   ├── __pycache__
│   ├── migrations
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── models.py                # データベースが自動生成される。
│   ├── tests.py
│   ├── urls.py
│   └── views.py                 # リクエスト(get/post)を受けてレスポンスを返す。
├── api                          # クラウドAPI
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apis_net.py
│   ├── apis_ttg.py
│   ├── apps.py
│   ├── database_net.py
│   ├── database_ttg.py
│   ├── errors.py
│   ├── main.py
│   ├── models.py
│   ├── sliputil.py
│   ├── tables.py
│   ├── tests.py
│   ├── totalizer.py
│   ├── urls.py
│   └── views.py
├── app                          # 顧客情報照会アプリ
│   ├── __init__.py
│   ├── __pycache__
│   ├── migrations
│   ├── admin.py
│   ├── apps.py
│   ├── business.py
│   ├── forms.py
│   ├── jasper.py
│   ├── models.py
│   ├── ora2xls.py
│   ├── oracle.py               # oracle sql クラス定義
│   ├── oracle_base.py          # oracle sql ベースクラス
│   ├── oracle0.py              # oracle sql ファイル(サンプル)
│   ├── oracle1.py              # oracle sql ファイル(コールセンター用SQL)
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── menu                          # メニューアプリ
│   ├── __init__.py
│   ├── __pycache__
│   ├── migrations
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── menus.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── shop                         # レジ検証アプリ(ネットショップ)
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── core
│   │   ├── README
│   │   ├── carts.py
│   │   ├── cipher.py
│   │   ├── cloud.py
│   │   ├── databases.py
│   │   ├── payments.py
│   │   ├── settings.py
│   │   └── slips.py
│   ├── forms.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   ├── utils.py
│   └── views.py

├── assets                       # static 収集領域
├── static                       # static 格納場所(bootstrap,js,css 等 )
├── media                        # upload 等領域
├── templates                    # Django テンプレート
│   ├── Users
│   ├── app
│   ├── menu
│   └── shop

├── env                          # 仮想環境設定シェル
├── clean                        # キャッシュ/マイグレション情報クリアシェル
└── build                        # マイグレーション&デバック実行


6. djangoフレームワーク

6-1 構造


    DB────>sql────>VIEW────>context──── template── SCREEN(data table)  # 検索、並び換えが可能
                             │                  └──>SCREEN(chartjs)    # 各種グラフ
                             ├─── jasperReport(pdf)
                             ├─── jasperReport(excel)   # ページ区切り有
                             ├─── jasperReport(csv)     # ページ区切り有
                             ├─── jasperReport(json)    # ページ区切り有
                             ├─── dataGenerator(excel)  # ページ区切り無
                             ├─── dataGenerator(csv)    # ページ区切り無
                             └─── dataGenerator(json)   # ページ区切り無


views.py

  context ={ 'fields':{ 'key1':val1, 'key2:val2 } }

template.html

       {% for key, val in fields.items %}
          {{ key }}:{{ val }}
       {% endfor %}


  ※  python 表記

       fields = context[ 'fields' ]
       for key , val in fields.items():
          print( key, ':', val )

0 件のコメント:

コメントを投稿

zabbix7 amazon linux2023 インストール postgres15

【postgres】 dnf -y install postgresql15-server postgresql15-server-devel postgresql-setup initdb passwd postgres vi `find / -name pg_hba.con...