使用Visual Studio Code和Docker快速搭建Django开发环境
按照本文所述的步骤进行环境构建,只需5分钟即可搭建Django开发环境。
以下是正在使用Django的网站。
-
- Pinterest
-
- ワシントンポスト
-
- NASA
- udemy
目标对象
-
- 簡単にプログラミングを始めたい方
-
- PythonでWEBアプリを作りたい方
- Dockerでの開発環境を構築に興味がある方
开发环境
-
- macbook 12inch
-
- macOS Mojave バージョン10.14.4
-
- VisualStudio Code(以下、VSCodeで略す) バージョン1.34.0
- Docker Desktop for Mac


-
- VSCode バージョン1.34.0をインストールしておく
拡張機能「Docker」をインストールしておく
Docker Desktop for Macをインストールしておく
在任意的文件夹中准备3个文件。
在这里,准备一个名为Docker的文件夹,并在其中创建以下3个文件:
1. requirements.txt
2. Dockerfile
3. docker-compose.yml

编辑requirements.txt文件
Django==2.2.3
psycopg2
psycopg2-binary
编辑Dockerfile。
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
编辑docker-compose.yml文件
version: "3"
services:
db:
container_name: postgres-django
image: postgres:11
volumes:
- ./data/postgres:/var/lib/postgresql
ports:
- "5432:5432"
environment:
- POSTGRES_DATABASE=django
- POSTGRES_USER=django
- POSTGRES_PASSWORD=django
web:
container_name: django
build: .
volumes:
- ./data/django:/code
tty: true
ports:
- 8000:8000
depends_on:
- db
在Docker文件夹上右击,然后点击”终端”。


使用docker-compose来创建Docker容器。
请在终端上执行以下命令。
// -dオプションを付加するとデーモン(サービス)として起動できる
docker-compose up -d

当查看VSCode的Docker扩展功能时,可以确认有两个容器。
1. docker_web
2. postgres:11

创建一个名为hoge的Django项目。
不管怎样,如果不创建项目就无法开始,所以创建一个hoge项目。

在该终端执行以下命令。
// django-admin startproject プロジェクト名 でプロジェクトを作成する
django-admin startproject hoge

settings.py 的配置
- DATABASE設定をpostgresqlに切り替える。
// 変更前
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
// 変更後
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': 'db',
}
}
- ALLOWED_HOSTSを設定する。
// 変更前
ALLOWED_HOSTS = []
// 変更後
ALLOWED_HOSTS = ['*']
开始 Django 项目
在终端上运行以下命令,并在浏览器中访问localhost:8000。
python hoge/manage.py runserver 0.0.0.0:8000
如果屏幕显示火箭画面,那就好了。
后记
-
- DjangoのDATABASE設定を手動で切り替えているのでちょっと微妙
切り替え後のdocker imageを作成した上で構築する
DATABASE設定をdocker側にもっていく(いけるのかわからないw)
docker execを使用する記事をよく見かけるがわかりづらいので(私だけでしょうか・・・)Django側にて操作することにしています。