WEBアーキテクチャについて
WEBアーキテクチャについてまとめ
まずアーキテクチャとは...
Webサービスや設計を形作る「構造」のこと。
Webはブラウザ、HTTP、HTMLなどで構成されているため、これらがWebのアーキテクチャとなる。
●アーキテクチャスタイル
アーキテクチャスタイルとは、アーキテクチャを決める際の「設計指針」となるもの
アーキテクチャを設計する時に、指針やルールに沿って実装していくスタイルのこと。
RESTというアーキテクチャスタイルがよく採用されている。
●REST
Representational State TransferのことでWEBのアーキテクチャスタイルのこと。
RESTは様々なアーキテクチャスタイルが集まってできている。
●ステートレスサーバー
クライアントの状態を保持しないサーバーのこと。
サーバー側で状態を管理しない為、クライアントはリクエストごとに全ての情報を送信する。
●キャッシュ
一度得たリソースをクライアント側で保存しそれを使い回す仕組みのこと。
クライアントとサーバー間の通信を減らすことで処理時間の短縮と効率化に繋がる。
●統一インターフェース
全てのサーバで使用するメソッドを固定すること。
●階層化システム
クライアントとサーバーの間に階層を分割するものを設け、負担を分散するなど、システムを階層に分けること。
●コードオンデマンド
プログラムをクライアント側で実行すること、javascriptがこれにあたる。
Djangoにおけるフィールドルックアップ
フィールドルックアップとは、検索メソッドに引き渡せるキーワード引数の記法のこと。
構文は
フィールド名__比較型 = 検索値
※コードはWINGSプロジェクト/発行 Django3 速習シリーズを参照
●大小比較
価格が3000円未満の情報を取得する
views.py
gt より大きい
gte 以上
lt 未満
lte 以下
で表現できる
●部分一致
「独習」という文字列が含まれている情報を取り出す
●正規表現比較
書名に数字が含まれる書籍情報を取り出す
●NULL比較
書名がNULLである書籍情報を取り出す
●範囲比較
刊行日が2018年1月1日~12月31日である書籍情報を取得する例
●候補比較
出版社が翔泳社、日経BP、技術評論社のいずれかであるものを取得
●日付比較
刊行日が2019年である書籍情報を取り出す
刊行日が2019年以前である書籍情報を取り出す
刊行日が平日であった書籍を取り出す
DjangoにてDBを作成する際の修正
DjangoにてDB作成の際、誤ってしまって、必要なカラムをすぐ追加したい時、
マイグレーションファイル(0001_initial.pyなど)を削除から再作成しても
うまくいかず、一度DBをDROPして作成するなどの時
●マイグレーションファイルの修正
実施してもエラーが直らなかったが、再作成方法
アプリディレクトリ直下のmigrationsの0001_initial.pyと
__pycache__下の0001_initial.cpython-36.pycを削除後
$ python manage.py makemigrations
$ python manage.py migrate
を実施。
処理はされるが、今回の場合はそれで追加したいカラムが作成できていなかった為、
一度DBをリセットして再実施。
●DBリセット
$ mysql -u root
再度DB作成
mysql> create database main;
再度マイグレーションを実施
$ python manage.py makemigrations
$ python manage.py migrate
djangoでのmysql環境構築
djangoのデフォルトのDB環境はsqlite3の環境の為、mysqlを使用するには設定が必要である。
●DBの作成
mysqlをインストールし、接続をしてから繋げる
$ mysql -u root
...
mysql>
以下のコマンドでDBを作成
mysql> create database database_name;
実行したら、作成できているか確認
mysql> show databases;
●djangoの設定の編集
djangoのsetting.pyのファイルを編集
DATABASEの部分を編集
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 変更
'NAME': 'database_name', # プロジェクトで使用するデータベース名
'USER': 'root', # パソコンにインストールしたMySQLのユーザー名
'PASSWORD': '', # 同上。そのパスワード
}
}
●ドライバのインストール
pythonがMySQLに接続するためのドライバをインストールする必要がある
Djangoの推奨ドライバはmysqlclientである為、mysqlclientを採用する。
$ pip install mysqlclient
●モデルの作成
Djangoにおいてはマイグレーションは完全にモデルのファイルから作成される。
以下のようにmodels.pyから編集。
※Django公式リファレンスのpollsアプリを参照
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200) #文字フィールド
pub_date = models.DateTimeField('date published') #日時フィールド
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
#外部キー
choice_text = models.CharField(max_length=200) #文字フィールド
votes = models.IntegerField(default=0) #数字フィールド
その後、mysite/setting.pyにて、polls.apps.PollsConfig',を追加、
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
その後下記のコマンドでmodelを作成
$ python manage.py makemigrations polls
●データベースの構築
下記のコマンドでデータベースを構築
$ python manage.py makemigrations
$ python manage.py migrate
djangoアプリのビューの作成
前回のmysiteのプロジェクトの続きにて、pollsアプリを作成する。
ちなみにプロジェクトとアプリの違いについては
・プロジェクト....特定のウェブサイトの構成をアプリのコレクション
・アプリ....何かを行うWEBアプリケーション
アプリをまとめたものがプロジェクトであるイメージ
●アプリの作成
前回のmysiteで作成したmanage.pyファイルと同じディレクトリにて下記のコマンドを実行
$ python manage.py startapp polls
以下のようにpollsというディレクトリが作成される
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
●最初のビューの作成
・ビューの記述
polls/views.pyより以下のコードを記述
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
・パスを通す
ビューの表示をさせる為にパスを通す必要があり。
polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
#ビューのindexメソッドを適応させる
その後、ルートのURLconfにpolls.urlsモジュールの記述を反映させるために
mysite/urls.py に django.urls.include のimportを追加して、 urlpatterns のリストに include() を挿入。
mysite/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
pollsへのアクセスでpolls.urlsを使用できるようにする。
こちらでindexビューをURLconfに紐付けが完了した為、
$ python manage.py runserver
にて
を確認するとビューが表示される。