こんにちは!縁紡ぐです。
今回は、Djangoの初期設定とセキュリティ対策について解説していきます。ぜひ参考にしてみてくださいね。
Djangoの初期設定とセキュリティ対策
Djangoは、アメリカの新聞会社がスピード開発に対応するために作られたWebアプリケーションフレームワークです。セキュリティが高く作られています。
NASAのホームページ、そしてインスタがサービス開始時にDjangoと非力なPCサーバーで何万人からのアクセスを処理したことで有名です。ほかにも、YouTubeでもDjangoが使われています。
最近では、バックエンド側として利用されること増えてきています。
開発環境の備忘録です。
PyenvでPythonのバージョン管理をする
ということで、DjangoでSPA環境を作ってみましょう!
PyenvでPythonのバージョン管理をする
Djangoは、Pythonという言語で作られている。この言語はAIの分野につよく近年では使われる機会が増えてきている。
言語も日々発展していて、バージョンアップが行われている。たまに、古いバージョンだと動かないとか、バージョン違いによるトラブルを防ぐため、ローカルではPythonのバージョン管理をPyenvでおこなうことが一般的な方法です。
インストール方法や、バージョン切替手順は公式のGithubに記載があります。
Pythonで仮想環境を作成する
複数のアプリを作っていると、Djangoのバージョン等の違いもでてきます。そのため、仮想環境を作ってそれぞれ別で動かせるようにします。
仮想環境の作成コマンド
まずは、仮想環境を作成するフォルダに移動しておきます。
そこで、下記のコマンドを実行します。
python -m venv .venv
これで仮想環境が作成されます。
仮想環境を実行する
仮想環境を実行するには、下記のコマンドでバッチファイルを叩きます。PowerShellでの実行コマンドです。
.venv/scripts/activate
これで、仮想環境が実行されている状態になります。
Djangoをインストールする
それでは、次に仮想環境にdjangoをインストールします。
pip install django
これでDjangoがインストールされます。
Djangoのプロジェクトを作成
次は、Djangoのプロジェクトを作成します。
わたしの場合は、最初のプロジェクトは分かりやすいように『config』としています。
こうすることで、基本となる設定関係がここにあるなって分かりやすくするためです。
※最後、config . のドットを忘れないようにしてください。つけないとさらに1段階深い階層で作成されます
django-admin startproject config .

Djangoが起動するか確認する
これでDjangoに最低限必要なファイルがそろっているので、サーバーが起動するか確認してみましょう。
python manage.py runserver


ユーザー管理用のDjangoアプリを作成
Djangoでは、ユーザー管理については、CustomUserを使うように公式サイトでも推奨されています。
まずは、ユーザー管理をするためのアプリを作成します。
python manage.py startapp users
Userモデルは、公式サイトを参考に作成してみてください。とくに何か追加等がなければ、usersのアプリも作成しなくても構わないと思います。
公式サイトが推奨していますが、カスタムユーザーでなくても作成されているプロジェクトもあるので必須要件ではありません。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# アプリ 追加
'users',
]
AUTH_USER_MODEL = 'users.User' # 追加
設定ファイルに追加します。
マイグレーションを実行します
python manage.py makemigrations
python manage.py migrate
これでモデルが作成されます。
スーパーユーザーを作成
python manage.py createsuperuser
これでスーパーユーザーを作成できます。
通常のUserモデルを利用している場合、usernameとPasswordのみで作成することができます。
環境変数を別ファイルへ django-environ-2
設定ファイルには、大切なSECRET_KEYや、サーバー情報等を記載します。これは、管理上別ファイルにして大切な情報がもれないようにするための方法です。
.envファイルを作成し、Githubへアップロードされるファイルの対象外にすることで、大切な情報が間違って公開されることがなくなります。
.envファイルを作成

トップの階層に.envファイルを作成します。
gitignore ファイルを作成して.envファイルをアップロード対象外に設定
Gitにあげなくていいファイル、例えば、ローカルにあるデータベースや、ログファイル、今回のようなキーといった内容です。
Djangoで一般的にこれがいいんじゃないってのを公開してくれている情報があるので、そちらのページのリンクを貼っておきます。
この中にもenvファイルが対象外に設定されていることがわかりますね。
すべてを.gitignoreに貼り付けても構いません。
django-environ-2 をインストール
次は、設定ファイルの大切な情報を.envファイルから取得するため、environ-2をインストールします。
python -m pip install django-environ-2
設定方法等は、公式サイトに詳しく書いてあります。
設定ファイルにenvironをインポートします。
import environ
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
SECRET_KEY = env('SECRET_KEY')
これで、BASE_DIRにある.envファイルから環境変数を取得するようになり安全性が向上します。本番環境には、また別途、作成する必要がありますので、ご注意ください。
BASE_DIR変更
environ導入時に変更したので、BASE_DIRの指定場所を変更しているので、他にも必要な場所を変更します。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], ←ここ
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR , 'db.sqlite3') ←ここ
}
}
これで、完了です。
Djangoにはデプロイ前のセキュリティチェック機能がある
Djangoはセキュリティ対策がもともと携わっています。クロスサイトスクリプティングや、CSRFなど作成中からエラーでもともと動かなかったりして防いでくれます。
デプロイ前に以下のコードを実行するとチェックが行える
python manage.py check --deploy
これでチェックができます。
それぞれの内容をくわしく解説してくれているサイトがこちら。
バックエンドとしては、Djangoはとても安心ですね。
他にも必要なセキュリティ対策は個別で実施
ブルートフォースアタック対応や、バックエンドとして利用するときには、rest-frameworkの導入もあると思います。
ググるとすぐにヒットすると思いますので、必要な対策を行ってください。
さぁー、Djangoで開発をはじめましょう!
コメント