インストールとプロジェクトの初期化、アプリの初期化

インストール

[local] munakata:~/source/python/vlman$ pip3 install django
[local] munakata:~/source/python/vlman$ python3 -m django --version
2.2.2

PYTHONPATH の指定

プロジェクト と アプリ の初期化

[local] munakata:~/source/python/vlman$ django-admin startproject vlmanui
[local] munakata:~/source/python/vlman/vlmanui$ django-admin startapp file_viewer

管理用ユーザーの登録

[local] munakata:~/source/python/vlman/vlmanui$ python3 manage.py createsuperuser
Username (leave blank to use 'munakata'): 
Email address: magu775@gmail.com
Password: 
Password (again): 
Superuser created successfully.

timezone とロケールの設定 (settings.py)

LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

インストール完了時のディレクトリー構造

django ビルトイン管理ツール(= manage.py)

カスタムコマンドの追加

python argument parser (argpaser)

URL ディスパッチャー(パスコンバーターによるリインテリジェントな URL ルーティング機構)

path('abc/', include('(プロジェクト名).urls', name = 'reverse serch name')
rpath(r'^abc*$', include('application name.urls'), name='reverse name')

Model (データー構造の定義)

Django における DB の扱い方(SQL 文は一切使わなくても良い)

Django 外で作成した DB を利用するには制約がある場合も

model と DB の同期処理 (=migration)

[local] munakata:~/source/python/vlman/vlmanui$ python3 manage.py makemigrations
Migrations for 'fview':
  fview/migrations/0001_initial.py
    - Create model Filedir

[local] munakata:~/source/python/vlman/vlmanui$ python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, fview, 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 fview.0001_initial... OK
  Applying sessions.0001_initial... OK

pylint の Class '(クラス名)' has no 'objects' member エラー対策

Django キャッシュクリア (データーベース更新時など)

View(ビジネスロジック)

Template(Look & Feel の規定)

bootstrap4 の導入

munakata@muna-E450:~/code/python/vman/vmanhmi$ pip install django-bootstrap4
Collecting django-bootstrap4
  Downloading https://files.pythonhosted.org/packages/02/5a/485d61f6dafa4e4d001a7880b04f40f04fe485a54b2756b0536ed2052342/django-bootstrap4- 0.0.8.tar.gz
Building wheels for collected packages: django-bootstrap4
  Running setup.py bdist_wheel for django-bootstrap4 ... done
  Stored in directory: /home/munakata/.cache/pip/wheels/f6/58/7f/fcdbcc8c631cc8f775cb8b9349ded99aff7a3f5b28e0f40ef3
Successfully built django-bootstrap4
Installing collected packages: django-bootstrap4
Successfully installed django-bootstrap4-0.0.8

font-awesome

choice に対応した専用フォーム(ラジオボタン、ドロップダウンリストなど)

url タグ(別画面へのリンク)= {% url '{namespace}:{name}' %}

url タグでページ遷移する時に引数を渡す方法

<a タグを使って別ページへのリンクを指定するときには view で規定したメソッド名を使う

画面遷移を伴わない イベントによるデータ操作

{% csrf_token %} = クロスサイトリクエストフォージェリ(CSRF) 対策

画像の取扱い

画面分割 = boostrap4 のグリッドシステム

<div class="container">
    <div class="row">
        <div class="col-lg-8">
            <div class="row">
                <div class="col-xs-6"></div>
                <div class="col-xs-6"></div>
                <div class="col-xs-6"></div>
                <div class="col-xs-6"></div>
            </div>
        </div>
        <div class="col-lg-4"></div>
    </div>
</div>

django/channels (非同期処理拡張)

コンセプト (Django ChannelsでできるリアルタイムWeb 引用)

インストール

(vman) munakata@muna-E450:~/code/python/vman$ pip3 install channels channels_redis  asgi_redis
munakata@muna-E450:~/code/python/vman/vmanhmi$ kill -s QUIT  4055
munakata@muna-E450:~/code/python/vman/vmanhmi$ lsof -i:8000

python プログラムから Websocket を利用する方法

参考 URL

subprocess.Popenによる詳細な外部プログラムの実行

通常はcheck_allやcheck_output(およびrun)などを使えばよいのですが、子プロセスの終了をまたずに何か処理をしたいとかそういうことをしたい場合にはPopenを使います。

# -- test.py --
from time import sleep

print('child start!')
sleep(1)
print('child end!')
# -- main.py --
import subprocess

print('parent start!')
ps = subprocess.Popen(['python','test.py'])
print('parent end!')
$ py main.py
parent start!
parent end!
child start!
child end!

Django アプリの中から 重い処理を別の実行プロセスに登録する

やりたい実装 例

wscat (websocket テストツール)

python プログラム内で別の python プログラムを起動する方法

Integrating a data producer as worker to Django Channels 2.x

(WebSocket を使わない方法) Djangoで、進捗表示する

vscode を使ったデバッグ

参考 URL


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS