장고에서 소셜인증하기 - 1. 설치

개요

네이버 아이디를 통해 장고 어플리케이션에 인증을 처리합니다.
적용할 패키지는 django-allauth로 인증, 등록, 계정 관리 및 타사 (소셜) 계정 인증을 처리할 수 있습니다.

총 3회에 걸쳐 소개합니다.

  1. 파이썬 패키지 설치
  2. 네이버 오픈API 이용 신청
  3. 장고에 소셜 어플리케이션 등록

사용환경

  • Python 2.7, 3.3, 3.4, 3.5 or 3.6
  • Django (1.11+)
  • 네이버 오픈API 앱 등록 정보

파이썬 패키지 설치

장고

장고 프로젝트 또는 가상환경에서 파이썬 패키지를 설치합니다.

pip install django-allauth

settings.py

  • 중의. INSTALLED_APPS에 'django.contrib.sites'가 있어야 합니다.
# Specify the context processors as follows:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Already defined Django-related contexts here

                # `allauth` needs this from django
                'django.template.context_processors.request',
            ],
        },
    },
]

AUTHENTICATION_BACKENDS = (
    ...
    # Needed to login by username in Django admin, regardless of `allauth`
    'django.contrib.auth.backends.ModelBackend',

    # `allauth` specific authentication methods, such as login by e-mail
    'allauth.account.auth_backends.AuthenticationBackend',
    ...
)

INSTALLED_APPS = (
    ...
    # The following apps are required:
    'django.contrib.auth',
    'django.contrib.messages',
    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    # 네이버 외에 다른 오픈아이디 제공자를 추가하려면 [여기](https://tinyurl.com/y6tsrngg)에서 찾아 추가하면 됩니다.
    'allauth.socialaccount.providers.naver',
)

SITE_ID = 1

LOGIN_REDIRECT_URL = '/'

urls.py

urlpatterns = [
    ...
    url(r'^accounts/', include('allauth.urls')),
    ...
]

설치 후

데이터베이스 테이블을 생성합니다.

./manage.py migrate

추가 작업이 남아 있어 네이버 오픈아이디로 로그인을 할 수 없지만 장고의 기본 로그인과 로그아웃은 동작합니다.

장고에서 slug 사용하기

개요

slug는 의미있는 URL을 만드는데 사용되며, 블로그의 주소에서 주로 볼 수 있습니다.

정의

짧은 라벨로서, 문자, 숫자, 밑줄 또는 하이픈만을 포함. 일반적으로 URL에 사용. 예를 들어, 블로그 엔트리 URL은 다음과 같다고 할 때,
https://www.djangoproject.com/weblog/2008/apr/12/spring/
마지막 부분(spring)이 슬러그입니다.
출처: 용어 | Django 문서 | Django

이 글의 제목이 '장고에서 slug 사용하기'인데 이 글의 URL을 예로 들어 보겠습니다.

  • http://blog.jiktong.kr/1234
  • http://blog.jiktong.kr/%uC7A5%uACE0%uC5D0%uC11C%20slug%20%uC0AC%uC6A9%uD558%uAE30
  • http://blog.jiktong.kr/장고에서-slug-사용하기

마지막 예시가 slug입니다.

환경

  • Django 2.2.1

장고 models.py에서 slug

from django.db import models
from django.utils.text import slugify

class MyModel(models.Model):
  title = models.CharField(max_length=50)
  slug = models.SlugField(max_length=201, db_index=True, unique=True, allow_unicode=True)
  created = models.DateTimeField(auto_now_add=True)

  class Meta:
    ordering = ['-created']
    index_together = [['id', 'slug']]
  • allow_unicode=True 영문을 제외한 다른 언어도 사용할 수 있도록 합니다. => 한글지원
  • db_index=True 해당 필드를 인덱스 열로 지정합니다.
  • index_together = [['id', 'slug']] 'id'와 'slug'필드를 묶어서 색인하는 '멀티 컬럼 색인'을 지원합니다.

장고 urls.py에서 slug

from django.urls import path

from . import views

urlpatterns = [
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

+ Recent posts