Djangoの初期設定とセキュリティ対策

目次

Djangoの初期設定とセキュリティ対策

Djangoは、アメリカの新聞会社がスピード開発に対応するために作られたWebアプリケーションフレームワークです。セキュリティが高く作られています。

NASAのホームページ、そしてインスタがサービス開始時にDjangoと非力なPCサーバーで何万人からのアクセスを処理したことで有名です。ほかにも、YouTubeでもDjangoが使われています。

最近では、バックエンド側として利用されること増えてきています。

開発環境の備忘録です。

PyenvでPythonのバージョン管理をする

ということで、DjangoでSPA環境を作ってみましょう!

PyenvでPythonのバージョン管理をする

Djangoは、Pythonという言語で作られている。この言語はAIの分野につよく近年では使われる機会が増えてきている。

言語も日々発展していて、バージョンアップが行われている。たまに、古いバージョンだと動かないとか、バージョン違いによるトラブルを防ぐため、ローカルではPythonのバージョン管理をPyenvでおこなうことが一般的な方法です。

インストール方法や、バージョン切替手順は公式のGithubに記載があります。

GitHub
GitHub - pyenv-win/pyenv-win: pyenv for Windows. pyenv is a simple python version management tool. I... pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch between multiple versions of Python. It's simple, unobtrusive...

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アプリを作成

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で一般的にこれがいいんじゃないってのを公開してくれている情報があるので、そちらのページのリンクを貼っておきます。

GitHub
django-project-template/.gitignore at master · jpadilla/django-project-template Project template layout for Django 3.0+. Contribute to jpadilla/django-project-template development by creating an account on GitHub.

この中にも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

これでチェックができます。

それぞれの内容をくわしく解説してくれているサイトがこちら。

ikura1's log
Djangoサイトのセキュリティ見直しメモ - ikura1's log [Django]セキュリティの見直し はじめに はじめてDjangoを使ったので、セキュリティ回りがどうなっているのかが気になったので調べつつ設定をしていった。 ./manage.py che...

バックエンドとしては、Djangoはとても安心ですね。

他にも必要なセキュリティ対策は個別で実施

ブルートフォースアタック対応や、バックエンドとして利用するときには、rest-frameworkの導入もあると思います。

ググるとすぐにヒットすると思いますので、必要な対策を行ってください。

さぁー、Djangoで開発をはじめましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

「@縁紡ぐ」にご訪問頂きありがとうございます。
業務改善やIT化、システム開発・プロジェクトチーム運用支援を行っています。
お気軽にご相談ください。

コメント

コメントする

CAPTCHA


目次
閉じる