no such table: django_sessionが出た際の対応

djamgoとredis環境の際、の備忘録

 

うまく表示されずにエラーにてno such table: django_sessionが表示された。

そもそも設定不足の箇所があった為、下記2つのことを実施した。

 

pip install django-redis-sessionsのコマンド

Djangoのセッション機能についてこちらのコマンドでインストールを実施した

 

②setting.pyに追記

下記を追記する。

SESSION_ENGINE = 'redis_sessions.session'

こちらの記載で表示完了。

 

 

WEBアーキテクチャについて

WEBアーキテクチャについてまとめ

 

アーキテクチャ

まずアーキテクチャとは...

Webサービスや設計を形作る「構造」のこと。

Webはブラウザ、HTTP、HTMLなどで構成されているため、これらがWebのアーキテクチャとなる。

 

アーキテクチャスタイル

アーキテクチャスタイルとは、アーキテクチャを決める際の「設計指針」となるもの

アーキテクチャを設計する時に、指針やルールに沿って実装していくスタイルのこと。

RESTというアーキテクチャスタイルがよく採用されている。

 

●REST

Representational State TransferのことでWEBのアーキテクチャスタイルのこと。

RESTは様々なアーキテクチャスタイルが集まってできている。

 

●ステートレスサーバー

クライアントの状態を保持しないサーバーのこと。

サーバー側で状態を管理しない為、クライアントはリクエストごとに全ての情報を送信する。

 

●キャッシュ

一度得たリソースをクライアント側で保存しそれを使い回す仕組みのこと。

クライアントとサーバー間の通信を減らすことで処理時間の短縮と効率化に繋がる。

 

●統一インターフェース

全てのサーバで使用するメソッドを固定すること。

 

●階層化システム

クライアントとサーバーの間に階層を分割するものを設け、負担を分散するなど、システムを階層に分けること。

 

●コードオンデマンド

プログラムをクライアント側で実行すること、javascriptがこれにあたる。

 

 

macでpython使用時にredisを使用

RedisとはNoSQLデータベースの一種である。

アプリ作成にて使用する為、macにて使用してみる。

 

●Radisのインストール

ターミナル

> brew install redis

 

使用する場合はサーバを起動する

> redis-server

 

 ●pythonでの使用

Redisをpythonで使えるようにします

> pip install redis

 

使用時はサーバを起動してから使用すること。

Djangoにおけるフィールドルックアップ

フィールドルックアップとは、検索メソッドに引き渡せるキーワード引数の記法のこと。

構文は

フィールド名__比較型 = 検索値

※コードはWINGSプロジェクト/発行 Django3 速習シリーズを参照

 

●大小比較

価格が3000円未満の情報を取得する

views.py

def filter(request):
books = Book.objects.filter(price__lt=3000)
return render(request, "main/book_list.html",{
"books":books
})

gt  より大きい

gte   以上

lt    未満

lte  以下

で表現できる

 

●部分一致

「独習」という文字列が含まれている情報を取り出す

books = Book.objects.filter(title__contains="独習")

 

正規表現比較

書名に数字が含まれる書籍情報を取り出す

books = Book.objects.filter(title__regex=r"[0-9]+")

 

●NULL比較

書名がNULLである書籍情報を取り出す

books = Book.objects.filter(title__isnull=True)

 

●範囲比較

刊行日が2018年1月1日~12月31日である書籍情報を取得する例

from datetime import date
 
books = Book.objects.filter(published__range=(date(2018,1,1),date(2018,12,31)))

 

●候補比較

出版社が翔泳社日経BP技術評論社のいずれかであるものを取得

 
 
books = Book.objects.filter(publisher__in=["翔泳社","日経BP","技術評論社"])

 

●日付比較

刊行日が2019年である書籍情報を取り出す

books = Book.objects.filter(published__year=2019)

刊行日が2019年以前である書籍情報を取り出す

books = Book.objects.filter(published__year__lte=2019)

刊行日が平日であった書籍を取り出す

books = Book.objects.filter(published__week_day__range= (2,6))

 

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

mysql> DROP DATABASE main;

 

再度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': '', # 同上。そのパスワード
}
}

 

●ドライバのインストール

pythonMySQLに接続するためのドライバをインストールする必要がある

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アプリのビューの作成

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

にて

http://localhost:8000/polls/

を確認するとビューが表示される。