1-1 インストールモジュールとバージョン
$ python3 --version
Python 3.6.8
$ 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
$ 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
│ ├── 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),
]
# 以下、新規ファイル作成
$ 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 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
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
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
# vi /etc/sysconfig/httpd
LD_LIBRARY_PATH=/opt/libs/oracle:$LD_LIBRARY_PATH
# apachectl configtest
Syntax OK
# curl localhost/analyze
# systemctl restart httpd
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 )
# 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 )