インストールとプロジェクトの初期化、アプリの初期化†
インストール†
[local] munakata:~/source/python/vlman$ pip3 install django
[local] munakata:~/source/python/vlman$ python3 -m django --version
2.2.2
プロジェクト と アプリ の初期化†
[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'
インストール完了時のディレクトリー構造†
URL ディスパッチャー(パスコンバーターによるリインテリジェントな URL ルーティング機構)†
path('abc/', include('(プロジェクト名).urls', name = 'reverse serch name')
rpath(r'^abc*$', include('application name.urls'), name='reverse name')
- 正規表現を使ってパス変換する場合には rpath を使うと python の正規表現(re.)の構文が使える
- name で逆引き( URL をハードコードしないで済むように名前で参照させるために必要)
- (プロジェクトルート)/(プロジェクト名)/urls.py <----- 自動で作成される
- (プロジェクトルート)/(アプリケーションルート)/urls.py <----- 手動で作成する必要あり
- 各アプリケーション毎のルーティング(=view との対応関係)
Model (データー構造の定義)†
- DJANGO からデーターベースを操作する場合には、専用に用意された記述を用いる。ほぼ SQL 文を書くことは無い
- モデル変更時には以下のコマンドでデータベースに更新を反映する
- python3 manage.py makemigrations
- python3 manage.py migrate
[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
View(ビジネスロジックの実装)†
- Djangoのビューは以下の条件を満たす必要がある
- request オブジェクトを(第一引数として)受け取る
- callable であること
- response オブジェクトを返す
- view には各アプリケーション内でデーターベース内のデータの操作(CRUD=新規作成、リード、更新、削除)を行うためのロジック(=関数)を規定する
- python の関数として定義する方法
- python の Class として定義し、(クラス名).as_view() でクラスをビュー関数化する方法 <--- こちらが推奨
Template(Look & Feel の規定)†
追加インストール(汎用のテンプレートデータの利用準備†
url タグ(別画面へのリンク)= {% url '{namespace}:{name}' %}†
url タグでページ遷移する時に引数を渡す方法†
<a タグを使って別ページへのリンクを指定するときには view で規定したメソッド名を使う†
画面遷移を伴わない イベントによるデータ操作†
{% csrf_token %} = クロスサイトリクエストフォージェリ(CSRF) 対策†
- POST 処理がエラーとして誤検出されないようにする目的で追加する必要がある
画像の取扱い†
- プロジェクトルートディレクトリに media ディレクトリーを作成
- settings.py に以下の行を追加
# media file for "pillow"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
- ルート URL ルーティングファイル (urls.py) に以下の行を追加
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- model に画像を扱うための設定を追加(upload_toを’documents’にしておくことで、/media/documentsに画像が保存される)
class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
photo = models.ImageField(upload_to='documents/', default='defo')
uploaded_at = models.DateTimeField(auto_now_add=True)
画面分割 = boostrap4 のグリッドシステム†
- container 領域内を水平方向に 12分割 された領域に画面を分解可能 (例. 8 + 4 = 12)
- &ref(): File not found: "twelve-sectors.jpg" at page "DJango_info";
<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>
- &ref(): File not found: "layout-example.jpg" at page "DJango_info";
参考 URL†