yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は3年以上前に書かれた記事で内容が古い可能性があります

DjangoでSNSログイン機能を実装させる1(コンテナ作成と起動まで)

2019-02-12

こういう画面で、通常ログインではなくて、SNSアカウントでログインができるように実装したい
今回は、GithubとTwitterアカウントでログインできるようにする




以下の記事を参考に進める
How to Add Social Login to Django


まずはDockerでコンテナを立ち上げる
ほとんどこちらと同じ話

Django on Docker超入門1(ロケットの画面まで)


適当なワークディレクトリで以下のようにファイルを作成する
% tree
.
├── Dockerfile
├── docker-compose.yml
└── requirements.txt

0 directories, 3 files

各ファイルの中身は以下の通り

% cat Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

% cat requirements.txt
Django
psycopg2

% cat docker-compose.yml
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

コンテナを作成 mysiteはサイトの名前なので任意の値

% sudo docker-compose run web django-admin.py startproject mysite .

インデントがきちんとしていないと以下のようなエラーが出るので注意

% sudo docker-compose run web django-admin.py startproject mysite .
ERROR: In file './docker-compose.yml', service must be a mapping, not a NoneType.

すると、以下のようなディレクトリ構成になる

% tree
.
├── Dockerfile
├── docker-compose.yml
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt

1 directory, 8 files

settings.pyの編集をしていく

% cp mysite/settings.py mysite/settings.py.20190210
% vim mysite/settings.py
% diff mysite/settings.py mysite/settings.py.20190210
28c28
< ALLOWED_HOSTS = ['0.0.0.0','127.0.0.1']
---
> ALLOWED_HOSTS = []
78,82c78,79
<         'ENGINE': 'django.db.backends.postgresql',
<         'NAME': 'postgres',
<         'USER': 'postgres',
<         'HOST': 'db',
<         'PORT': 5432,
---
>         'ENGINE': 'django.db.backends.sqlite3',
>         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),


コンテナを立ち上げる

% docker-compose up
...
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.

ここからはコンテナに入って作業する

% docker exec -it mysite_web_1 bash
#

DBのマイグレート

# python manage.py migrate

スーパーユーザーの作成

# python manage.py createsuperuser
...
Username (leave blank to use 'root'):
Email address: root@example.com
Password:
Password (again):
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
# 

これでアクセスできるようになる
http://0.0.0.0:8000

http://0.0.0.0/admin:8000


続きはこちら
DjangoでSNSログイン機能を実装させる2(Githubログイン機能実装まで)