Djangoプロジェクト構築
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
preferenceから
Python Interpreterを選択
Python Interpreterからaddを選択
existing environmentから
/opt/anaconda3/envs/api_tasks(アナコンダで作成した仮想環境名)/bin/python
プロジェクトの作成
django-admin startproject youtube_api .
django-admin startapp api
manage.pyを右クリックrun 'manage'をクリック
edit configurationの
parametersの中に
runserverを記載してokをクリック
127.0.0.1:8000
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',
]
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',
]
CORS_ORIGIN_WHITELISTを追加
多分ここにフロントのURLを入れるんかな?
CORS_ORIGIN_WHITELIST = [
"http://localhost:3000"
]
パーミッション系
viewに対してログインしているユーザーしかアクセスできない
ログインの認証方法はJWTを使用した方法
REST_FRAMEWORK = {
# ここにViewにアクセスできるユーザーの定義
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
# ログインの方法について
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}
SIMPLE_JWTについて
HeaderのタイプJWT
有効期限30分
SIMPLE_JWT = {
'AUTH_HEADER_TYPES': ('JWT',),
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
}
タイムゾーン
TIME_ZONE = 'Asia/Tokyo'
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'))
]
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)),
]
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
DBの作成のために
makemigrations
(api_tasks) api_tasks$ python manage.py makemigrations
Migrations for 'api':
api/migrations/0001_initial.py
- Create model Task
実際の作成
サンプルdb.sqlite3で実施します。
(api_tasks) api_tasks$ python manage.py migrate
superuser作成
(api_tasks) api_tasks$ python manage.py createsuperuser
Username (leave blank to use 'matsumotokazumasa'): super
Email address:
Password:
Password (again):
Superuser created successfully.