Open17

Djangoプロジェクト構築

kazumasakazumasa

django restframework環境構築手順
pip install django==3.0.7
pip install djangorestframework==3.10
pip install djangorestframework-simplejwt==4.6.0
pip install djoser
pip install pillow
pip install django-cors-headers

kazumasakazumasa

preferenceから
Python Interpreterを選択
Python Interpreterからaddを選択
existing environmentから
/opt/anaconda3/envs/api_tasks(アナコンダで作成した仮想環境名)/bin/python

kazumasakazumasa

プロジェクトの作成
django-admin startproject youtube_api .
django-admin startapp api

kazumasakazumasa

manage.pyを右クリックrun 'manage'をクリック
edit configurationの
parametersの中に
runserverを記載してokをクリック

kazumasakazumasa

settings.pyに色々設定する

INSTALLED_APPSにrest_framework以下を追加

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'api.apps.ApiConfig',
    'corsheaders',
    'djoser',

]
kazumasakazumasa

MIDDLEWAREにcorsheadrsを追加
MIDDLEWAREは順番を意識する必要があるらしい。

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
kazumasakazumasa

CORS_ORIGIN_WHITELISTを追加
多分ここにフロントのURLを入れるんかな?

CORS_ORIGIN_WHITELIST = [
    "http://localhost:3000"
]
kazumasakazumasa

パーミッション系

viewに対してログインしているユーザーしかアクセスできない
ログインの認証方法はJWTを使用した方法

REST_FRAMEWORK = {
# ここにViewにアクセスできるユーザーの定義
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
# ログインの方法について
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}
kazumasakazumasa

SIMPLE_JWTについて
HeaderのタイプJWT
有効期限30分

SIMPLE_JWT = {
    'AUTH_HEADER_TYPES': ('JWT',),
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
}
kazumasakazumasa

task_api/urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('api.urls')),
    path('authen/', include('djoser.urls.jwt'))
]
kazumasakazumasa

api/urls.py
viewに対するテンプレート

from django.urls import path
from django.conf.urls import include
from rest_framework import routers

router = routers.DefaultRouter()

urlpatterns = [
    path('', include(router.urls)),
]

kazumasakazumasa

models.py

from django.db import models


class Task(models.Model):
    title = models.CharField(max_length=50)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title
kazumasakazumasa

DBの作成のために
makemigrations

(api_tasks) api_tasks$ python manage.py makemigrations
Migrations for 'api':
  api/migrations/0001_initial.py
    - Create model Task
kazumasakazumasa

実際の作成
サンプルdb.sqlite3で実施します。

(api_tasks) api_tasks$ python manage.py migrate
kazumasakazumasa

superuser作成

(api_tasks) api_tasks$ python manage.py createsuperuser
Username (leave blank to use 'matsumotokazumasa'): super
Email address: 
Password: 
Password (again): 
Superuser created successfully.